Mar*_*aio 5 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]
Run Code Online (Sandbox Code Playgroud)
这很好用!
但在谷歌小组,他们建议添加:
Options +FollowSymlinks
RewriteBase /
Run Code Online (Sandbox Code Playgroud)
任何人都可以如此友善地解释我为什么我必须添加这些最后一行,并解释一下他们的意思和他们做了什么?
不添加这些生产线是否存在潜在的风险?
非常感谢,
Tim*_*one 20
建议您添加Options +FollowSymlinks因为必须启用符号链接以使mod_rewrite正常工作,并且有可能在允许您启用它时,主服务器配置不会启用它.我怀疑symlink跟随是否必要的原因是因为模块进行了多次调用apr_stat(),看起来它需要遵循符号链接以便在所有情况下获取文件信息.
至于RewriteBase,通常没有必要.文档继续介绍它,但由于大多数人的文件都存在于DocumentRoot某个地方,因此通常只有在外部重定向并且使用目录相对URL时才有用.为了说明我的意思,请考虑以下事项:
RewriteEngine On
RewriteRule ^redirect index.html [R,L]
Run Code Online (Sandbox Code Playgroud)
对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]
Run Code Online (Sandbox Code Playgroud)
......例如按预期工作.但是,如果您有许多规则需要一个共同的基础并且在目录之间转换,或者您的内容不在根目录下,那么RewriteBase在这种情况下适当设置将是有用的.
在没有指定时绝对没有安全风险Options +FollowSymlinks,因为如果你不这样做并且它不是由主服务器配置设置的,mod_rewrite将始终返回403 Forbidden.对于试图查看您的内容的人来说,这是一个问题,但它绝对没有给他们任何扩展机会来利用您的代码.
RewriteBase如果您的.htaccess文件中有一个未正确配置的规则集,则不设置可能会暴露您的Web内容的路径,但我不确定是否有任何理由认为存在安全风险.
| 归档时间: |
|
| 查看次数: |
13197 次 |
| 最近记录: |