重定向永久,www重定向&网址重写

时间:2013-03-11 15:48:46

标签: .htaccess

我给旧网站一个新的CMS。现在我需要一个带有3个部分的.htaccess,但它只适用于其中2个部分:

  1. 重定向永久
  2. www redirect(这不起作用)
  3. url rewriting
  4. 现在我将解释更多内容。 第0部分(仅适用于整体)

    RewriteEngine On
    

    第1部分(重定向永久)我用来将旧CMS的URL重定向到新CMS的内容。

    RewriteCond %{THE_REQUEST} !/de-old-content.html
    Redirect permanent /de-old-content.html /old/content.html
    

    第2部分(www重定向)我用来避免重复的内容。

    RewriteCond %{HTTP_HOST} ^website.de [NC]
    RewriteRule ^(.*)$ http://www.website.de/$1 [L,R=301]
    

    第3部分(网址重写)将“old / content.html”转换为“index.php?adresse = old / content”

    RewriteRule ^(.*)\.html$ index.php?adresse=$1 [l,qsa]
    

    [l,qsa]只允许使用$ _GET。

    是否可以组合这些部分?

    如果我使用第2部分,它会显示正确的内容

    http://www.website.de/abc/def/ghi.html

    但没有www,它会重定向到

    http://www.website.deabc/

    我认为本部分必定存在错误。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

重定向是mod_alias的一部分,而RewriteCond和RewriteRule是mod_rewrite的一部分。因此,第1部分的RewriteCond特别适用于第2部分的RewriteRule,这将使其无法正常工作。

最好避免同时使用重写和重定向。

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^website.de [NC]
RewriteRule ^(.*)$ http://www.website.de/$1 [L,R=301]

RewriteRule ^de-old-content\.html$ /old/content.html [L,R=301]

RewriteRule ^(.*)\.html$ index.php?adresse=$1 [L,QSA]

PS。保持理智,在测试时使用302。一切正常后,将其更改为301。由于您已经使用过301,所以也清除了浏览器缓存,因此所有旧的301都将从浏览器的缓存中删除。