.htaccess显示没有尾部斜杠的目录index.html

时间:2012-06-06 20:10:18

标签: apache .htaccess

我在Apache服务器上运行了一个Jekyll生成的站点,我在设置正确的.htaccess文件时遇到了一些麻烦。 Jekyll将index.html文件放入代表每个页面的文件夹中,因此我的网址目前看起来像domain.com/foo/

我想从网址中删除该尾随斜杠,以便它与我之前设置的完全匹配(并且因为我觉得它看起来更好)。

目前处理重写的.htaccess文件部分如下所示:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

Options -Indexes

DirectoryIndex index.xml index.html

我尝试过遵循建议here,但这会让我进入重定向循环。

有人可以帮帮我吗?简而言之,我想要的是domain.com/foo URL,以显示/ foo目录中的index.html文件,以及domain.com/foo/和domain.com/foo/index.html重定向到域。 COM / foo中。

1 个答案:

答案 0 :(得分:3)

您应该可以使用它来关闭斜杠的添加。

DirectorySlash Off

请注意,添加尾部斜杠是有充分理由的。在目录名中使用尾部斜杠会使相对URL指向同一个东西,无论URL是否以“foo / bar结尾” /index.html“或只是”foo / bar /“。如果没有尾部斜杠,相对URL会引用与正常情况相同的某个级别。 (例如:“baz.jpg”会给用户“/foo/baz.jpg”而不是“/foo/bar/baz.jpg”,因为如果它不受保护,则会删除尾随的“bar”尾部斜杠。)因此,如果您这样做,您可能希望避免使用相对URL。

然后重写目录名以返回index.html,你可能会这样做:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}/index.html -f
RewriteRule ^(.*)$ /$1/index.html [L]

检查REQUEST_URI / index.html是否存在,以及它是否执行内部重定向。