为了将所有somefolder/index.html
(以及somefolder/index.htm
)重定向到somefolder/
,我在Apache .htaccess文件中使用以下简单的重写规则:
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*\/index\.html?\ HTTP/
RewriteRule ^(.*)index\.html?$ "/$1" [R=301,L]
这很好用!
但是在Google groups上,他们建议还添加:
Options +FollowSymlinks
RewriteBase /
非常感谢,
最佳答案
为什么建议他们:
建议您添加Options +FollowSymlinks
,因为必须启用symlink following才能使mod_rewrite正常工作,并且有可能虽然允许您将其打开,但主服务器配置未启用它。我怀疑必须遵循symlink的原因是因为该模块对apr_stat()
进行了多次调用,看起来它需要遵循symlink才能在所有情况下获取文件信息。
至于RewriteBase
,通常没有必要。文档goes on about it,但是由于大多数人的文件确实位于 DocumentRoot
下,因此通常仅在外部重定向且使用目录相对URL时才有用。为了说明我的意思,请考虑以下几点:
RewriteEngine On
RewriteRule ^redirect index.html [R,L]
对example.com/redirect的请求将导致外部重定向到example.com/full/path/to/web/root/index.html。原因是在处理重定向之前,mod_rewrite会重新添加当前目录路径(这是
RewriteBase
的默认值)。如果将RewriteBase
修改为/
,那么路径信息将替换为该字符串,因此对index.html的请求现在将是对/index.html的请求。请注意,无论
RewriteBase
的值如何,您也可以在替换上明确地执行此操作:RewriteEngine On
RewriteRule ^redirect /index.html [R,L]
...例如按预期工作。但是,如果您有许多需要公共(public)基础的规则并且在目录之间移动,或者您的内容不在根目录下,则在这种情况下适当设置
RewriteBase
会很有用。不使用它们的风险:
不指定
Options +FollowSymlinks
绝对没有安全风险,因为如果不指定且不是由主服务器配置设置的,mod_rewrite将始终返回403 Forbidden。对于试图查看您的内容的人来说,这是个问题,但绝对不会给他们任何扩展利用您的代码的机会。如果您在一个.htaccess文件中配置了不正确的规则集,则不设置
RewriteBase
可能会将路径公开到您的Web内容,但是我不确定有任何理由认为存在安全风险。