vir*_*tor 6 apache mod-rewrite
我有一个问题,重写URL到fastcgi调度程序.如果我只离开:
RewriteRule ^(.*)$ dispatch.fcgi/$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)
我期望L(最后一条规则)只能进行一次重写.相反,它会继续预先添加,dispatch.fcgi直到apache报告错误.
我知道它可以修复:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi/$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)
但多次重写的原因是什么?是否L做别的事情比我想象的那样?
我知道这是一个老问题,但对于寻找真实答案的其他人来说,这里是:
该[L]标志DOES的工作.htaccess文件.它告诉rewrite module跳过该特定.htaccess文件中的所有以下规则.它完成了它的工作,Apache重写了url并退出了.htaccess文件.
但是,如果请求url已被重写,则在.htaccess文件末尾,整个url匹配过程将再次使用新url启动.
这是上面发生了什么,^(.*)$将始终与当前的URL,它会导致一个无限循环,只有maxredirect重写选项(默认值为10)停止.
该!-f文件属性测试(由提问者提到的)会解决这个问题,因为该网址将匹配一个真实的文件名:
RewriteCond%{REQUEST_FILENAME}! - f
RewriteRule ^(.*)$ dispatch.fcgi/$ 1 [L,QSA]
现在,如果我们请求http://example.com/toappend,.htaccess重写它dispatch.fcgi/toappend并且不会发生重写循环.
Hy,之后补充一下 RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
Run Code Online (Sandbox Code Playgroud)
..它应该工作停止循环.
| 归档时间: |
|
| 查看次数: |
5754 次 |
| 最近记录: |