pro*_*mus 7 apache mod-rewrite url-rewriting
我为我的页面塑造了两个不同的RewriteRules:
# Enable URL Rewriting
RewriteEngine on
# exclude followed stuff
RewriteRule ^(js|img|css|favicon\.ico|image\.php|anprobe|content|libs|flash\.php|securimage)/ - [L,QSA,S=2]
# conditions (REQUEST dont point @ file|dir|link)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-F
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# rules
RewriteRule ^(?!index\.php)brillen/(.*(brillen)|360|neu)/(.*)([a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}(?!\.))(.*)$ /index.php/brillen/$1?art_id=$4&$5&%{QUERY_STRING} [NS,QSA,L]
RewriteRule ^(?!index\.php)(.*)$ /index.php/$1 [NS,QSA,L]
Run Code Online (Sandbox Code Playgroud)
...而且我遇到了一个奇怪的问题,它存在于导致页面内部加载两次的每个请求中,这导致db操作和电子邮件调度也执行两次的问题.
有没有人对此有所了解?
提前致谢!
注1:根据浏览器的资源跟踪,所有请求的资源都是有效的.
注2:问题可能源于保留和后处理PATH_INFO?(/index.php/$1 => /index.php/foo/bar/...)
重写引擎无法使单个HTTP请求运行两次.它将Apache的HTTP请求路由到静态文件,代理函数或模块(如PHP),并在请求中进行更改.但它无法克隆请求并将其提供给apache 2次.
如果你有任何"运行两次"问题,你可能会遇到空图像网址错误.事实上,它并不是一个真正的错误,它是HTML的一个特性(至少在HTML5之前)和url-parsing的一个特性.
如果你得到一个空的GET url,HTML说明浏览器应该使用相同的参数重新发送相同的查询(给他当前页面的查询).这可以使POST请求发生2次(如果请求的第一页是POST).那么这些空的GET网址在哪里?大部分时间你得到:
<IMG SRC="" ...> (in the HTML)
Run Code Online (Sandbox Code Playgroud)
要么:
url() (in the css)
Run Code Online (Sandbox Code Playgroud)
要么:
<script type="text/javascript" src=""></script>
<link rel="stylesheet" type="text/css" href=""> (in the HTML headers)
Run Code Online (Sandbox Code Playgroud)
另请阅读@Jon关于favicon查询的回答.您应始终使用wget或telnet 80查询在没有浏览器行为的情况下测试结果.
更新:此博客上提供的详细解释和后续添加HTML5,可以删除现代浏览器的此行为.
| 归档时间: |
|
| 查看次数: |
3225 次 |
| 最近记录: |