我已经在不同文件中配置了301重写规则(基于url模式),并创建了一个规则文件来调用其他文件。我已经根据URL模式在规则文件中添加了If
条件。但是我的If
条件没有被正确调用,首先是If
条件之外的规则被调用,然后先经过If
条件。
<If "%{REQUEST_URI} =~ m#^/category1#i">
Include conf.d/sites.d/example/301_redirections_category1.conf
</If>
<ElseIf "%{REQUEST_URI} =~ m#^/category2#i">
Include conf.d/sites.d/example/301_redirections_category2.conf
</ElseIf>
<Else>
Include conf.d/sites.d/example/301_redirections_vanity.conf
</Else>
我的虚拟主机看起来像:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule dispatcher_module modules/mod_dispatcher.so
<VirtualHost *:80>
ServerName www.example.com
RewriteEngine on
Include conf.d/sites.d/example/301_redirections.conf
Include conf.d/sites.d/example/rewrite.conf
LogLevel alert rewrite:trace6
<Directory />
<IfModule disp_apache2.c>
ModMimeUsePathInfo On
SetHandler dispatcher-handler
</IfModule>
ErrorDocument 404 "/error/pagenotfound.html"
ErrorDocument 500 "/error/errorpage.html"
ErrorDocument 403 "/error/pagenotfound.html"
Options FollowSymLinks
AllowOverride None
# Insert filter
SetOutputFilter DEFLATE
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
# prevent clickjacking
Header always append X-Frame-Options SAMEORIGIN
</Directory>
</VirtualHost>
当我点击网址https://www.example.com/category2
时,首先执行conf.d/sites.d/example/rewrite.conf
的规则,然后调用我的配置文件conf.d/sites.d/example/301_redirections.conf
。
如果我在If-Else
条件之前或之后添加任何规则,则会正确调用其他规则,然后If-Else
阻止,因此问题仅在if阻止。