RewriteRule用于匹配不以特定前缀开头的URL

时间:2013-03-29 14:55:49

标签: apache .htaccess

我有以下.htaccess代码:

RewriteCond %{QUERY_STRING} (^|&)tmpl=(component|system) [NC]
RewriteRule .* - [L]
RewriteCond %{QUERY_STRING} (^|&)t(p|emplate|mpl)= [NC]
RewriteRule .* - [F]

当我访问/administrator/index.phpoption=com_component&task=ajax&format=raw&template=something时,我收到403错误。

我应该如何重构这4行以满足第二个条件(在所有网址中屏蔽?tp=?template=等,但以/administrator开头?)

因此/administrator/index.php?option=com_component&task=ajax&format=raw&template=something应该可以访问,/index.php?option=com_component&template=something不应该访问。

1 个答案:

答案 0 :(得分:2)

您可以在上一条规则中使用否定lookahead assertion

RewriteCond %{QUERY_STRING} (^|&)tmpl=(component|system) [NC]
RewriteRule .* - [L]
RewriteCond %{QUERY_STRING} (^|&)t(p|emplate|mpl)= [NC]
RewriteRule ^(?!administrator/).+ - [F]