我正在尝试美化一些网址。我配置了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]
答案 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