Bar*_*lom 5 php mod-rewrite url-rewriting
我有一个网站,其中各个部分自己解析请求URL,有些则不解析(例如vBulletin论坛)..htaccess我必须向适当的脚本发送请求是:
# wiki, shop, admin
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !(.*)\.js
RewriteRule ^wiki/(.*)$ w/index.php?title=$1 [PT,L,QSA]
RewriteRule ^wiki/*$ wiki/ [L,QSA]
RewriteRule ^shop/ /shop/shop.php [NC,L]
RewriteRule ^forum/admincp/pkr/ /forum/admincp/pkr/pkr.php [NC,L]
Run Code Online (Sandbox Code Playgroud)
这不像我预期的那样有效.我忘记了重写条件仅适用于跟随它们的第一个规则.问题是如何将这些RewriteCond itions应用于所有这些规则,而不必将它们复制4次?
出了什么问题是这样的:
然后将/shop/shop.php重新写入/shop/shop.php(读取:我们有一个无限循环).如果将此条件应用于该重写规则,则不会发生这种情况,因为/shop/shop.php是一个实际文件:
RewriteCond%{REQUEST_FILENAME}! - f
是的...
反转表达式并将其附加到破坏规则:
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} (.*)\.js
RewriteRule ^ - [L]
Run Code Online (Sandbox Code Playgroud)
我不明白Gumbo的答案,所以我发现这是有效的:
您可以反转匹配规则(例如使用!符号)而不是匹配某些内容并RewriteRule从该测试中执行多个匹配规则,如果找不到,则跳过X个规则.如:
RewriteCond %{HTTP_HOST} !^www.mydomain.com [NC]
RewriteRule . - [S=2] # Skip the below X lines if the above test passes
RewriteRule ^/images/(.*) /resources/images/$1 [L]
RewriteRule ^/favicon.ico /resources/favicon.ico [L]
Run Code Online (Sandbox Code Playgroud)
因此,如果HTTP_HOST以www.mydomain.com开头,我想要处理最后两个RewriteRules.但我正在做的是,如果HTTP_HOST 不是从www.mydomain.com开始,则跳过接下来的两个规则.第一个RewriteRule:. - [S=2]实际上并没有改变任何东西,但是S = 2标志意味着跳过下一个X = 2规则.
如果你问我,有点反向逻辑.
| 归档时间: |
|
| 查看次数: |
2635 次 |
| 最近记录: |