EDIT2
好的,现在我想明白你的问题了。
您在 play.php 中有一个用于处理所有 url 的 url,并且您希望它们被重定向到主页。
这里有两种可能的解决方案。这是第一个:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/play.php* [NC]
RewriteRule . /? [L,R=301]
</IfModule>
以上将使用 301 重定向将任何对 play.php 的请求重定向到您的主页,这意味着重定向是永久性的。这与临时的 302 重定向不同。所以使用 301 重定向很重要。
同样在这个重写规则中,我们不关心 url 是否存在。所以你不需要有实际的 play.php 文件或任何东西。它只是根据 url 进行匹配。
在RewriteRule那一行,末尾有一个问号,这是为了在重定向时从url中删除查询字符串。我假设您不希望查询字符串结转。
[NC] 用于不区分大小写的匹配,因此/PlAy.php 也会被重定向
另一种方法是使用重定向指令:
Redirect 301 /play.php http://www.mysite.com/
如果用户尝试访问 play.php,这将执行 301 永久重定向到您的主页。唯一的缺点是查询字符串出现了。您可以在末尾添加一个问号,它将删除查询字符串。不幸的是,问号仍然存在。
如果你碰巧有多个端点,而不仅仅是 play.php,你可以这样做:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/play\.php* [NC, OR]
RewriteCond %{REQUEST_URI} ^/another_url\.php* [NC]
RewriteRule . /? [L,R=301]
</IfModule>
此 RewriteRule 将匹配 play.php 或 another_url.php 并执行 301 重定向到您的主页。
或者:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/(play|another_url)\.php* [NC]
RewriteRule . /? [L,R=301]
</IfModule>
这是使用重定向指令的替代方法
Redirect 301 /play.php http://www.mysite.com/
Redirect 301 /another_url.php http://www.mysite.com/
您也可以使用 RedirectMatch 指令来使用正则表达式(注意我还没有实际测试过这个)
RedirectMatch 301 /(play|another_url)\.php http://www.mysite.com/
编辑
忽略这个答案。我误读了你的问题。以下将所有请求重定向到 index.php ,除非文件或目录存在,这不是您现在想要的,因为我阅读了您的问题。
这是 Wordpres 的做法。我相信 Zend 和 Joomla 也有这种变化。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress