2013-12-18 205 views
0

我在我的htaccess文件中有以下内容,它需要一个类似于www.example.com/Page.php?id=About的URL并将其转换为www.example.com/about。唯一的问题是,当我在htaccess中设置Redirect 301s时,旧URL不会重定向到新的URL(我知道这是因为你不应该在基本的Redirect 301中传递参数 - 基本重定向的例子,已经在下面尝试过)。htaccess 301重定向URL参数

Redirect 301 /Page.php?id=About http://www.example.com/about 

问题是,新的URL不一定只是删除当前的id并用小写版本代替它。举例来说,我也想:

Redirect 301 /Page.php?id=Example http://www.example.com/example-page 

我想保持重写URL的当前功能,同时也希望将旧网址的任何访问重定向到新的(即更新谷歌索引) 。访问www.example.com/Page.php?id=目前仍然有效,但显示的页面没有内容。

Options +FollowSymLinks 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^([a-zA-Z0-9\-]+)/?$ Page.php?id=$1 
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2 
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2&tabid=$3 

回答

5

如果将此规则添加到.htaccess中,它应该执行重定向的工作。它会将?id = About添加到重定向到/ about。如果您运行的是2.4.0或更高版本,则可以添加QSD标志以放弃重定向中的查询字符串。

RewriteCond %{QUERY_STRING} ^id=About$ 
RewriteRule ^page.php /about [NC,R,L] 
+0

感谢您的建议。不幸的是,访问http://www.example.com/Page.php?id=About虽然没有重定向到http://www.example.com/about? –

+0

该规则适用于page.php,小写字母p。我刚刚用NC标志更新了答案,使规则不区分大小写。现在它应该匹配page.php和Page.php –

+0

谢谢,几乎在那里,我得到:http://www.example.com/about?id=About现在。是否有可能在最后没有?id = About? –