使用 RewriteCond 匹配多个查询字符串

使用 RewriteCond 匹配多个查询字符串

我在 Apache 配置文件中对 CGI 脚本进行了以下配置:

RewriteEngine on
RewriteCond %{QUERY_STRING} !^/var/log/syslog-ng/JBoss.*$
RewriteRule ^/cgi-bin/(.*)$ /secure-cgi-bin/$1 [R=301,L,QSA]

这个想法是,如果有人使用 CGI 脚本查看除以 开头的路径之外的路径/var/log/syslog-ng/JBoss,他们应该通过安全的 CGI 脚本进行重定向。

我现在想更改,RewriteCond以便无需通过安全 CGI 即可查看第二条路径。第二条路径是/var/log/syslog-ng/Tomcat

我该如何进行此项更改?

答案1

您可以像 samarudge 告诉您的那样使用多行和 [OR] 标志,但由于您的路径只有略微不同的,因此这里提醒一下:ReWriteCond/Rule 支持正则表达式,因此像这样的格式也是可能的:

RewriteCond %{QUERY_STRING} !^/var/log/syslog-ng/(JBoss|Tomcat).*$

答案2

你应该能够使用 [OR] 标志链接多个 RewriteCond

RewriteEngine on
RewriteCond %{QUERY_STRING} !^/var/log/syslog-ng/JBoss.*$ [OR]
RewriteCond %{QUERY_STRING} !^/var/log/syslog-ng/Tomcat.*$ [OR]
RewriteRule ^/cgi-bin/(.*)$ /secure-cgi-bin/$1 [R=301,L,QSA]

相关内容