How to redirect from an old php script to a new php script using mod_rewrite

馋奶兔 提交于 2019-12-11 13:57:24

问题


It's my first request here and hopefully I won't upset anyone.

Here's my story:

I have looked all over this place for a solution and wasn't able to find one. Here's hoping that someone can give some input.

I've basically managed to use Apache's mod_rewrite to create SEO-Friendly urls for my website.

E.g. Old path www.hostname/index1.php?session=user is now rewritten as www.hostname/user, which results into a SEO Friendly URL address.

However, the old path is still valid. I need to somehow redirect all the incoming old index1.php requests to the newer URLs, the SEO-Friendly ones, for the search engines to transfer the link popularities to the new ones. I believe I may have an infinite-loop redirect and that's why it's not working.

My code so far:

Options +FollowSymLinks
RewriteEngine On
RewriteBase / 

## Redirect still valid old links to SEO friendly ones
RewriteRule ^/?index1\.php\?session=user$ /user [R=301]

## Catch the above and rewrite the URL 
RewriteRule ^/?user/?$ /index1.php?session=user [QSA,L]

The above rules never get hit when the htaccess file is parsed.

It hit me that I might be doing some sort of redirect loop here so I thought about renaming the index1.php file to index2.php and create something like:

## Redirect still valid old links to SEO friendly ones
RewriteRule ^/?index1\.php\?session=user$ /user [R=301]

## Catch the above and rewrite the URL 
RewriteRule ^/?user/?$ /index2.php?session=user [QSA,L]

However, that failed too.

What would be the best approach to this? What am I doing wrong here?

Thank you!


回答1:


You can't match against the query string (everything after the ?) in a rewrite rule, so you can't match against the session= part. You also can't simply match against the %{QUERY_STRING} var because that gets populated by you other rule when it rewrites the SEO friendly URL to the one with the query string. So you need to match against the actual request:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index1\.php\?session=([^&]+)&?([^\ ]*)
RewriteRule ^ /%2?%3 [L,R=301]



回答2:


Update your .htaccess rules to

Options +FollowSymLinks
RewriteEngine On
RewriteBase / 

## Redirect still valid old links to SEO friendly ones
RewriteCond %{QUERY_STRING} !no-redir [NC]
RewriteCond %{QUERY_STRING} session=user [NC]
RewriteRule ^/?index1\.php$ /user? [R=301,NC,L]

## Catch the above and rewrite the URL 
RewriteRule ^/?user/?$ /index1.php?session=user&no-redir [QSA,NC,L]


来源:https://stackoverflow.com/questions/18334882/how-to-redirect-from-an-old-php-script-to-a-new-php-script-using-mod-rewrite

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!