0

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

  1. 永久重定向
  2. www 重定向(这不起作用)
  3. url重写

现在我将解释更多。第 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 部分(url 重写)将“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/

我认为这部分肯定有错误。

提前致谢。

4

1 回答 1

1

Redirect 是 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。

于 2013-03-11T19:28:37.920 回答