将所有动态URL重定向到索引页面

时间:2012-03-28 16:04:52

标签: php apache .htaccess

因为我想将http://www.mysite.com/play.php?id=4820等所有动态网址重定向到http://www.mysite.com/

我有这么多动态网址我不希望我的用户看到页面,如页面未找到等等。因此,每当用户尝试访问动态网址时,如上所述,他应该被重定向到主页。请有人告诉我如何使用.htaccess实现这一目标

此致 phphuger。

3 个答案:

答案 0 :(得分:1)

启用mod_rewrite并将此代码放在DOCUMENT_ROOT下的.htaccess中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+play\.php[\s\?] [NC]
RewriteRule ^ / [L,R]

答案 1 :(得分:0)

我认为应该这样做。

RewriteRule ^\?.*$    http://www.mysite.com

答案 2 :(得分:0)

<强> EDIT2

好的,现在我想了解你的问题。

您在play.php上有网址,用于处理您的所有网址,并希望将其重定向到主页。

以下是两种可能的解决方案。这是第一个:

<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文件或任何东西。它只是根据网址进行匹配。

在RewriteRule的行上,最后有一个问号,这是从重定向的url中删除查询字符串。我假设您不希望查询字符串继续使用。

[NC]用于不区分大小写的匹配,因此/PlAy.php也会被重定向

另一种方法是使用Redirect指令:

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指令

的替代方法
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