重定向301子目录与RewriteCond结合使用

时间:2013-12-17 08:18:10

标签: .htaccess redirect rewrite

我正在尝试将整个文件夹(包含数百页)重定向到另一个域上的同一文件夹。 该网站使用CMS使用rewritecond来生成漂亮的页面网址:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

这似乎与我的重定向相冲突。 当我使用redirect 301 /folder/ http://www.site.invalid/folder/时,页面会重定向到http://www.site.invalid/folder/index.php?q=folder/pagename.html,返回404.

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

而不是像这样使用301:

redirect 301 /folder/ http://www.site.invalid/folder/

尝试使用像这样的301,然后将其放在另一个重写之前:

RewriteRule ^/folder/(.*)$ http://www.site.invalid/folder/$1 [R=301,L]

基本上现在会发生的是这个规则将首先运行,执行301重定向(因为它有一个R = 301标志),并且因为它有一个最后一个标志(L)然后它将阻止服务器再处理之后重写。

所以你的htaccess文件看起来像是:

RewriteEngine On

RewriteRule ^/folder/(.*)$ http://www.site.invalid/folder/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

答案 1 :(得分:1)

保持整个.htaccess像这样:

RewriteEngine On

RewriteRule ^(folder/.*)$ http://www.site.invalid/$1 [R=301,NC,NE,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?q=$1 [L,QSA]

通常将301规则保留在其他全能规则之前。

相关问题