2

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

我想从 URL 中删除该斜杠,以便它与我之前设置的完全匹配(也因为我认为它看起来更好)。

目前,我的 .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

我已经尝试按照此处的建议进行操作,但这使我陷入了重定向循环。

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

4

1 回答 1

7

您应该能够使用它来关闭斜杠的添加。

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 是否存在,以及是否执行内部重定向。

于 2012-06-06T20:14:11.283 回答