【问题标题】:Rewriting old urls to pretty urls, and redirect old urls to new with .htaccess将旧网址重写为漂亮的网址,并使用 .htaccess 将旧网址重定向到新网址
【发布时间】:2016-11-22 00:45:29
【问题描述】:

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

这是我对漂亮网址的重写规则(有效):

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

这是我想要的漂亮网址,但是当我将“旧网址”重定向到新网址时,会出现一些问题。

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

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

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

【问题讨论】:

  • 不要使用PT 标志。

标签: apache .htaccess mod-rewrite url-redirection friendly-url


【解决方案1】:

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

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

所以我想让网址“漂亮”(即对 SEO 友好),但也让旧(丑陋的)网址重定向到新网址,这样旧书签仍然可以工作。

这是我的解决方案:

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]

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2016-09-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多