htaccess重写导致子目录中的文件为404

时间:2016-06-22 02:57:10

标签: .htaccess mod-rewrite url-rewriting

我的网站根目录中有一个.htaccess文件,其中包含以下重写规则,旨在从网址末尾删除.html

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.+)\.html\ HTTP/
    RewriteRule ^(.+)\.html$ http://example.com/$1 [R=302]
    RewriteRule ^([a-z]+)$ /$1.html [L]
</IfModule>

它适用于直接位于根目录(example.com/page.html)内的所有页面,但位于第一页深度(example.com/dir/page.html)的页面上。尽管如此(example.com/dir/page),404显示我在地址栏中的确切方式。

我已经确认目录及其所有页面确实存在于正确的位置并且已正确命名。我也确认这段代码是404的罪魁祸首(如果删除它,问题就会消失)。

所以我一直在进行并仔细检查这些规则,但我是正则表达式的新手,很难理解这会导致子目录中的文件变成404.任何人都可以帮我解决有什么不对的吗?

1 个答案:

答案 0 :(得分:1)

问题在于你的模式,你需要允许斜杠以便它可以匹配子文件夹

    RewriteRule ^([a-z/]+)$ /$1.html [L]