.htaccess使用重写规则重定向301

时间:2011-05-26 21:24:45

标签: apache .htaccess mod-rewrite redirect url-rewriting

我正在尝试美化一些网址。我配置了htaccess文件,以便更改我的网址:

旧网址:http://mysite.com/index.php?id=45tye4 新网址:http://mysite.com/45tye4

我现在想永久地将旧网址重定向到新网址。这是我没有运气的尝试:

RewriteRule ^index.php?id=(.*)$ $1 [R=301,L]

主要问题似乎是'?'在网址中。当我尝试相同的网址时没有?重定向工作。我还尝试了其他没有运气的变种:

RewriteRule ^index.php\?id=(.*)$ $1 [R=301,L]
RewriteRule ^index.php[\?]id=(.*)$ $1 [R=301,L]

更新

我根据anubhava说明添加了重定向。重定向工作,但不幸的是我进入了重定向循环。我认为[L]标志应该解决重定向循环,但它没有。

RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^index\.php/?$ /%1? [R=301,L] 

RewriteRule ^(.*)$ index.php?id=$1 [L]

1 个答案:

答案 0 :(得分:1)

RewriteRule仅匹配REQUEST_URI。您必须使用RewriteCond来匹配查询字符串

试试这段代码:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{THE_REQUEST} ^GET\s/+index\.php [NC]
RewriteCond %{QUERY_STRING} (^|&|\?)id=(.*)(&|$) [NC]
RewriteRule . /%2? [R=301,L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?id=$1 [L]

这会将/index.php?id=45tye4的旧URI重定向到新的URI:/45tye4