Apache 为了将index.html重定向到root,为什么要使用Symlinks和RewriteBase?
为了将所有Apache 为了将index.html重定向到root,为什么要使用Symlinks和RewriteBase?,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,为了将所有somefolder/index.html(以及somefolder/index.htm)重定向到somefolder/,我在Apache.htaccess文件中使用了以下简单的重写规则: RewriteEngine on RewriteCond %{THE_REQUEST} ^.*\/index\.html?\ HTTP/ RewriteRule ^(.*)index\.html?$ "/$1" [R=301,L] 这很有效 但至少他们还建议补充: Options +FollowS
somefolder/index.html
(以及somefolder/index.htm
)重定向到somefolder/
,我在Apache.htaccess文件中使用了以下简单的重写规则:
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*\/index\.html?\ HTTP/
RewriteRule ^(.*)index\.html?$ "/$1" [R=301,L]
这很有效
但至少他们还建议补充:
Options +FollowSymlinks
RewriteBase /
Options+FollowSymlinks
,因为必须启用symlink following才能正常工作,而且有可能在允许您打开它的同时,主服务器配置没有启用它。我怀疑symlink following是必要的,因为模块多次调用apr_stat()
,这看起来需要遵循symlinks,以便在所有情况下获取文件信息
对于RewriteBase
,通常不需要这样做。文档,但由于大多数人的文件确实位于“某处”下,通常只有当您在外部重定向并且使用目录相对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的请求
请注意,您也可以在replace上显式执行此操作,而不考虑RewriteBase的值:
RewriteEngine On
RewriteRule ^redirect /index.html [R,L]
…例如,按预期工作。但是,如果您有许多规则需要一个公共基础,并且在目录之间移动,或者您的内容不在根目录下,那么在这种情况下,适当地设置RewriteBase
会很有用
不使用它们的风险:
不指定选项+FollowSymlinks
绝对没有安全风险,因为如果不指定,并且主服务器配置没有设置,mod_rewrite将始终返回403禁止。对于试图查看您的内容的人来说,这有点问题,但这绝对不会给他们任何扩展的机会来利用您的代码
如果你在你的.HTAccess文件中有一个不正确配置的规则集,那么不设置“<代码>改写器基础> /代码>可能会暴露你的Web内容的路径,但是我不确定是否有任何理由考虑安全风险。 + 1,谢谢你解释这些的时间。我希望我能投你更多的票。我想知道RewriteBase是否是解决我问的另一个问题的解决方案:@Marco Demaio:没问题!至于你的另一个问题,我今天晚些时候会看一看,看看我有什么建议。