我给旧网站一个新的CMS。现在我需要一个带有3个部分的.htaccess,但它只适用于其中2个部分:
现在我将解释更多内容。 第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,它会重定向到
我认为本部分必定存在错误。
提前致谢。
答案 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都将从浏览器的缓存中删除。