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


redirecting all dynamic urls to index page

因为我想重定向所有动态url,比如http://www.mysite.com/play.php?id=4820到http://www.mysite.com/

我有太多的动态url,我不想让我的用户看到像找不到这样的页面,所以每当用户试图访问上面这样的动态url时,他都应该被重定向到主页。请有人告诉我如何使用.htaccess 实现这一点吗

谨致问候,phphuger。

启用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]

我认为应该这样做。

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

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>

此"重写规则"将匹配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指令来使用regex表达式(注意,我还没有真正测试过这个)

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