【发布时间】:2025-12-19 20:55:12
【问题描述】:
我想删除文件结尾 (.html) 和 url 中的尾部斜杠。当用户输入请求 ttp://example.com/jobs/director.html 他应该被重定向到http://example.com/jobs/director。这在大多数情况下非常有效,但是当页面名称等于子目录的名称时,不会删除尾部斜杠,并且服务器会尝试像这样解析路径:/jobs/.html(本例中的请求是 @987654322 @)。有人知道解决方案吗?我真的被困住了。谢谢!
我的文件结构:
工作(目录)
jobs/artist.html
jobs/director.html
index.html
jobs.html
我的 .htaccess 文件:
Options +FollowSymLinks
RewriteEngine On
DirectorySlash Off
# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
# remove .html file ending
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
【问题讨论】:
-
如果您希望通过
/jobs访问jobs.html,那么服务器应该如何知道是否请求了HTML 文件或文件夹?这不是一个好的设置,即使您现在设法解决了这个问题,也可能在未来导致更多问题。我强烈建议您将这两个名称中的任何一个更改为不同的名称。 -
“但是当页面名称等于子目录的名称时,尾部斜杠不会被删除” - 很确定它是 - 但是然后将不带斜杠请求的目录重定向到带有斜杠的版本的默认机制将启动,并撤消您的删除...
DirectorySlash指令控制此行为,但在您弄乱它之前,我建议您阅读文档非常仔细。 -
我无法更改结构,因为我需要拥有职位子页面(职位/艺术家、职位/导演)。我可以将目录中的 jobs.html 作为 index.html 移动,但我读过只有在 DirectorySlash 打开时才请求 DirectoryIndex。感谢文档的链接,我是这个主题的新手,但它已经得到很好的解释,我现在明白当我关闭 DirectorySlash 时我必须小心。