代码之家  ›  专栏  ›  技术社区  ›  Marco Demaio

Apache.htaccess重定向索引.html为了根,为什么要遵循symlinks和RewriteBase?

  •  5
  • Marco Demaio  · 技术社区  · 16 年前

    为了重定向所有 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 / 
    
    1. 有谁能解释一下我为什么要加上最后几行,并解释一下它们的意思和作用?

    2. 不添加这些行是否存在潜在的安全风险?

    1 回复  |  直到 16 年前
        1
  •  20
  •   Tim Stone    16 年前

    建议理由:

    建议你加上 Options +FollowSymlinks mod_rewrite 工作,并且有可能,虽然您可以打开它,但主服务器配置没有启用它。我怀疑symlink following之所以必要是因为模块对 apr_stat() ,看起来它需要遵循符号链接才能在所有情况下获取文件信息。

    至于 RewriteBase ,通常不需要。文件 goes on about it 但作为大多数人的档案 住在地下 DocumentRoot 在某些地方,它通常只在外部重定向和使用目录相关URL时起作用。为了说明我的意思,请考虑以下内容:

    RewriteEngine On
    
    RewriteRule ^redirect index.html [R,L]
    

    example.com/重定向 将导致外部重定向到 . 原因是,在处理重定向之前,mod\u rewrite会重新附加当前目录路径(这是 重写基 ). 如果你修改了 重写基 成为 / 现在是请求 /索引.html

    请注意,您也可以在replace上显式地执行此操作,而不考虑 重写基 :

    RewriteEngine On
    
    RewriteRule ^redirect /index.html [R,L]
    

    …例如,按预期工作。但是,如果您有许多规则需要一个公共基础,并且在目录之间来回移动,或者您的内容不在根目录下,那么适当地设置 那样的话。

    不使用它们的风险:

    ,因为如果您不这样做,并且它不是由主服务器配置设置的,mod\u rewrite将始终返回403 Forbidden。对于试图查看您的内容的人来说,这有点问题,但这绝对不会给他们任何扩展的机会来利用您的代码。

    重写基

    推荐文章