【发布时间】:2018-04-26 04:47:15
【问题描述】:
我有以下设置。 Apache 为每个站点运行一个单独的 VirtualHost 文件。 它们中的每一个都有自己的一组重写规则,例如 http 到 https 都运行良好。
我们希望发生的是,从全局配置中,我们需要能够检查请求是否针对特定子目录。如果是,那么我们应该允许此请求按原样处理,但此时我们不希望单独的虚拟主机文件重写规则启动。因此允许此目录在非 https 连接上提供服务,而不是重定向到 https .
我已经设置了重写规则,并且可以匹配目录并重定向到外部 url,如果它与显示其继承的全局匹配,但如果我尝试只允许它通过虚拟主机重写启动并重定向.
我尝试过使用 L 和 END,但这也不起作用。 有没有办法在不编辑已经配置的虚拟主机文件的情况下实现这一点?
主要的httpd配置条目
<Directory "/www">
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride All
allow from all
Order allow,deny
Require all granted
RewriteEngine On
RewriteOptions InheritDownBefore
RewriteCond %{REQUEST_URI} ^/sub_directory/$ [NC]
RewriteRule ^(.*) $1 [L,END]
#RewriteRule ^(.*) - [L,END]
#RewriteRule ^(.*) http://www.google.com [L,END] # This does get triggered
</Directory>
示例虚拟主机文件。
<VirtualHost *:80>
ServerName urlone.com
ServerAlias urltwo.com
DocumentRoot /www/
RewriteEngine On
# redirect to https
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://urlone.com$1 [R=301,L]
</VirtualHost>
所以如果我访问 urlone.com 它应该重定向到 https://urlone.com 但如果我访问 urlone.com/sub_directory 它需要不允许重定向到 https。
我希望这对某人有意义,并提前感谢您的帮助。
【问题讨论】:
标签: apache redirect mod-rewrite url-rewriting virtualhost