在我的.htaccess文件中,我添加了以下代码;
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
这会从我的页面中完全删除所有.html,但是有一个问题会将一个页面指向一个文件夹。
最初我有,www.domain.com/work.html
和www.domain.com/work/client.html
,但现在当你转到www.domain.com/work
时,它会尝试转到文件夹www.domain.com/work/
有人知道如何解决此问题,以便域/工作转到域/ work.html吗?
答案 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]