开发者

Replace one URL with another by using mod_rewrite

开发者 https://www.devze.com 2023-01-30 06:11 出处:网络
Current situation RewriteRule ^$ /index.php?page=Portal [R=301,L] When a user comes to the website and goes to the \"root\" url of the domain (RegExp \"^$\") he\'s redirected to /index.php?page=Por

Current situation

RewriteRule ^$ /index.php?page=Portal [R=301,L]

When a user comes to the website and goes to the "root" url of the domain (RegExp "^$") he's redirected to /index.php?page=Portal

That's working.

Now we have "index.php?page=Portal" in the google index and we have tons of links to that page on various locations all over the internet.

Intended new situation

We want the portal page to show up on the root url - no redirect. That's no problem... Just remove the redirect:

RewriteRule ^$ /index.php?page=Portal [L]

Now we also want the old url to redirect to the new location, and that's where I fail but can't se开发者_开发百科e why:

RewriteCond %{QUERY_STRING} ^page=Portal$
RewriteRule ^index.php$ http://www.jacatu.de/? [R=301,L]

As soon as I do this I end up in a redirect loop:

Replace one URL with another by using mod_rewrite

(When I change to 302 in .htaccess I see 302 redirects, so the loop really seems to be caused by mod_rewrite)

But why? All rules are marked as last [L] - so I think I can rule out that rule 2 triggers rule 1.


I enabled logging as suggested by Jacek Prucia and in fact it looked like having [L] in the URL doesn't stop execution. Both rules were processed.

I now changed the first rewrite to

RewriteRule ^$ /index.php?page=Portal&int=1 [L]

so that it doesn't match the RewriteCond of the internal rewrite so theoretically my problem is solved. It would be nice to know, though, why it did what it did. :)

0

精彩评论

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