2016-07-19 153 views
1

我在.htaccess设置中遇到了一些问题。 我的网站首页网址是:http://www.domain.com/b/en/index.php,我用mod_rewrite创建漂亮的网址:​​将旧网址改写为漂亮的网址,并使用.htaccess将旧网址重定向到新网址

这是我重写规则漂亮的URL(它的工作原理):

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

这是漂亮的URL我想要什么,但是当我将“旧网址”重定向到新网址时,存在一些问题。

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

这是我的旧网址重定向到新的规则:

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

不要使用'PT'标志。 – hjpotter92

回答

0

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

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

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

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

+0

它的工作原理!感谢您的支持。 – evenloooo

0

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

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

所以我要拍的URL“漂亮”(即搜索引擎友好),但也有旧的(丑陋的)的URL重定向到新网址所以旧书签仍然有效。

这里是我的解决方案:

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] 
相关问题