无操作Apache mod_rewrite规则

Wil*_*ken 5 apache .htaccess mod-rewrite

我有这样一个.htaccess文件:

RewriteCond /question2answer/%{REQUEST_FILENAME} !-f
RewriteCond /question2answer/%{REQUEST_FILENAME} !-d
RewriteCond OTHER_CONDITION_1
RewriteRule RULE_1 [L]

RewriteCond /question2answer/%{REQUEST_FILENAME} !-f
RewriteCond /question2answer/%{REQUEST_FILENAME} !-d
RewriteCond OTHER_CONDITION_2
RewriteRule RULE_2 [L]

...
Run Code Online (Sandbox Code Playgroud)

De Morgan的法律告诉我有更好的方法:

RewriteCond /question2answer/%{REQUEST_FILENAME} -f
RewriteRule NO-OP [L]
RewriteCond /question2answer/%{REQUEST_FILENAME} -d
RewriteRule NO-OP [L]

RewriteCond OTHER_CONDITION_1
RewriteRule RULE_1 [L]

RewriteCond OTHER_CONDITION_2
RewriteRule RULE_2 [L]    

...
Run Code Online (Sandbox Code Playgroud)

我可以在这里使用的无操作规则是什么?如果有很多,我看到性能影响最小的那个.

anu*_*ava 6

NO_OP(无操作)规则可以是这样的:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
Run Code Online (Sandbox Code Playgroud)

这意味着,如果请求是针对文件,或者如果请求是针对目录,则不执行任何操作(-在目标URI中表示).

  • 参考:https://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_co`“-”重写目标告诉mod_rewrite将请求不变地传递。` (2认同)