开发者

.htaccess redirect 301 using rewrite rule

开发者 https://www.devze.com 2023-03-08 20:42 出处:网络
I\'m trying to beautify some urls. I configured the htaccess 开发者_运维知识库file so my urls are changed:

I'm trying to beautify some urls. I configured the htaccess 开发者_运维知识库file so my urls are changed:

old url: http://mysite.com/index.php?id=45tye4 new url: http://mysite.com/45tye4

I want now to permanently redirect old urls to new urls. This is what I try with no luck:

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

The main problem seems to be the '?' in the url. When I try the same url without ? the redirect works. I also tried other variants with no luck:

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

Update:

I added the redirection according to anubhava instructions. The redirection works, but unfortunately I get into a redirect loop. I thought [L] flag should solve the redirection loop, but it doesn't.

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

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


RewriteRule matches only REQUEST_URI. You have to use RewriteCond to match Query string

Try this code:

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]

This will redirect old URI of /index.php?id=45tye4 to new URI: /45tye4

0

精彩评论

暂无评论...
验证码 换一张
取 消