我需要301重定向目录及其包含的重新网址:
/old-directory/any-url.html 301重定向到 /new-directory/any-url.html
和
/ old-directory / 301重定向到 / new-directory /
在该目录中(移动到/ new-directory),我有这个特定于目录的.htaccess,我需要遵守这些规则:
RewriteEngine On
RewriteRule ^list\.html$ list.php [QSA]
RewriteRule ^(.*)\.html$ index.php?hash=$1 [QSA,L]
也许没有必要指定它,但是在根目录中,我有这个root .htaccess,其规则我不想干涉:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-Z0-9-]*)$ index.php?page=$1 [QSA,L]
我尝试在根目录中添加它.htaccess:
RewriteRule ^old-directory$ /new-directory/ [R=301,NC,L]
RewriteRule ^old-directory/(.*)$ /new-directory/$1 [R=301,NC,L]
...但它不起作用(我得到500内部服务器错误)。 你知道为什么吗?由于我在.htaccess测试站点上成功测试了这个规则,我想这是因为它干扰了其他/新目录/特定.htaccess ...在这种情况下,将两个.htaccess合并为一个会更好吗怎么样?
答案 0 :(得分:0)
此问题是,即使您修正了500错误,您的基本重写规则也始终优先,因为old-directory
与RewriteRule ^([a-zA-Z0-9-]*)$
匹配,因此请确保订单正确并放置{{1}规则在现有规则之前:
old-directory
您会注意到我也简化了您的规则。没有理由你应该有2行。
不要忘记,一旦重定向到RewriteEngine On
RewriteRule ^old-directory(.*)$ /new-directory$1 [R=301,NC,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-Z0-9-]*)$ index.php?page=$1 [QSA,L]
,new-directory
(来自根目录)仍将适用,因此您可能需要将其更改为:
RewriteRule ^([a-zA-Z0-9-]*)$
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !^new-directory
RewriteRule ^([a-zA-Z0-9-]*)$ index.php?page=$1 [QSA,L]
看起来也有点可疑。您可能只需要%{REQUEST_FILENAME}.php
最后,您需要先查看Apache错误日志对500错误进行排序,然后重新组织规则,以免它们发生冲突。你可以合并它们。实际上,将它们合并以控制订单更容易。否则,他们只是级联,它可能变得相当复杂。