我正在尝试将整个文件夹(包含数百页)重定向到另一个域上的同一文件夹。 该网站使用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.
有人能指出我正确的方向吗?
答案 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规则保留在其他全能规则之前。