我正在将用户从Http重定向到Https,它工作正常,但客户要求跳过一个目录。
例如:如果访问以下网址,则用户不应重定向到https:www.example.com/ads
,但如果他访问任何其他网址,则应重定向。
以下是我目前使用的代码:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
RewriteEngine on
RewriteRule ^/(.*)$ https://www.example.com/$1 [QSA,L,R=301]
</VirtualHost>
答案 0 :(得分:1)
您可以尝试类似
的内容RewriteRule !^ads($|/) https://www.example.com%{REQUEST_URI} [L,R=301]
答案 1 :(得分:0)
您可以为重写规则添加重写条件,并且只有在满足重定向时才会执行重定向。
在你的情况下,你需要第一个规则检查当前请求是否没有使用https(不要进行无限重定向到同一个uri),第二个请求uri和可选的主机规则(如果你使用多个主机)名称,否则你可以跳过它)。这段代码应该有效:
<VirtualHost *:80>
ServerName example.com
RewriteEngine on
RewriteCond %{HTTP:PORT} !^443$ #Some other variants are available , but I prefer this one because not all work well on different environments
RewriteCond %{REQUEST_URI} !^/ads$
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^/(.*)$ https://www.example.com/$1 [QSA,L,R=301]
</VirtualHost>
所有可用的变量和其他代码段都可以在official documentation page找到。
答案 2 :(得分:0)
假设您在ads/
子目录中没有.htaccess。
使用THE_REQUEST
变量
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
RewriteEngine on
RewriteCond %{THE_REQUEST} !\s/+ads [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R=301]
</VirtualHost>
不要忘记重新启动Apache并完全清除浏览器缓存。