2013-03-11 127 views
0

我给旧网站一个新的CMS。现在,我需要3份的.htaccess,但只与他们的2期工程:重定向永久,www重定向和url重写

  1. 重定向永久
  2. WWW重定向(这不工作)
  3. URL重写

现在我将解释更多。 部分0(仅适用于整体)

RewriteEngine On 

第1部分(永久重定向)我用老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重写)到 “老/ content.html” 转换成 “的index.php?住址=旧/内容”

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/

我想一定是在本部misstake。

在此先感谢。

+0

它重定向到错误的主机?请注意,**重定向**指令不适用于RewriteCond条件,它们是不同模块的一部分。 – kjetilh 2013-03-11 16:37:21

+0

请使用网址作为示例,而不是规则。他们一开始并不工作。 – 2013-03-11 16:46:43

回答

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从浏览器的缓存中移除。

+0

谢谢,这工作正常。 – 2013-03-12 10:15:38