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:没问题!至于你的另一个问题,我今天晚些时候会看一看,看看我有什么建议。