删除.html会导致指向文件夹的链接

时间:2014-01-16 23:17:43

标签: .htaccess

在我的.htaccess文件中,我添加了以下代码;

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

这会从我的页面中完全删除所有.html,但是有一个问题会将一个页面指向一个文件夹。

最初我有,www.domain.com/work.htmlwww.domain.com/work/client.html,但现在当你转到www.domain.com/work时,它会尝试转到文件夹www.domain.com/work/

有人知道如何解决此问题,以便域/工作转到域/ work.html吗?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为mod_dir看到/work指向物理文件夹,并且因为它缺少一个尾部斜杠,它会自动将浏览器重定向到/work/DirectorySlash指令执行此操作并且默认情况下已启用(对于非常好的理由,因为存在信息泄露安全问题,即使使用索引文件,人们也可以查看目录的内容它被关闭了)。这个重定向发生在 mod_rewrite甚至被应用之前,因此您的规则甚至不被考虑。

如果您真的希望以这种方式设置站点,则必须关闭目录斜杠,并执行斜杠为您执行的操作:

Options -Multiviews
DirectorySlash Off
RewriteEngine On

# append the html:
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+)$ /$1.html [L]

# now handle the directory redirects:
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ /$1/ [L,R]