将旧url改写为漂亮的url,并使用.htaccessredirect旧url

我有一些问题.htaccess设置。 我的网站主页的url是: http : //www.domain.com/b/en/index.php ,我使用mod_rewrite创build漂亮的url: http : //www.domain.com/en

这是我的重写规则漂亮的url(它的作品):

 RewriteRule ^en/(.*)$ /b/$1 [L,QSA,NC,PT] 

这就是我想要的东西,但是当我将“旧url”redirect到新的url时,出现了一些问题。

我的Chrome浏览器显示“ www.domain.com redirected you too many times.

这是我的旧urlredirect到新规则:

 RewriteRule ^b/en/(.*)$ /en/$1 [NC,L,R=301] 

这是一个通用的两部分问题。 您需要将原始请求重定向到更漂亮的请求:

 RewriteRule ^en/(.*)$ /b/en/$1 [L,QSA,NC] RewriteCond %{THE_REQUEST} ^GET\ /b/(en)/(\S*) [NC] RewriteRule ^b/ /%1/%2 [R=301,L] 

测试新规则之前,请务必清除浏览器的缓存。

我有一个更通用的用例,我不得不稍微修改@ hjpotter92的解决方案。

旧的网址结构: http://example.com/index.php?page=foo : http://example.com/index.php?page=foo
新的网址结构: http://example.com/foohttp://example.com/foo

所以我想让网址“漂亮”(比如搜索引擎优化),而且旧的(丑陋的)网址也会重定向到新的网址,所以旧的书签仍然可以使用。

这是我的解决方案:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^/?(.*)$ /index.php?page=$1 [L,QSA,NC] RewriteCond %{THE_REQUEST} ^GET\ \/?index\.php\?page=(\S*) [NC] RewriteRule ^index.php /%1? [R=301,L]