.htaccess 将所有流量重定向到HTTPS,但有一个目录应强制使用HTTP

vom3gejh  于 2022-12-19  发布在  其他
关注(0)|答案(2)|浏览(116)

我试着重写许多帖子的条件,但似乎都不起作用。
我想在整个站点上强制HTTPS。除了一个目录必须强制HTTP
所有带有www.example.com的都应该是HTTPS
dir3中的任何内容:应将www.example.com/dir1/dir2/dir3/test.php强制为HTTP
以下是我目前的情况。

RewriteEngine On

# Redirect HTTP traffic to HTTPS
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{HTTPS} on
RewriteRule ^dir3/ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
ryhaxcpt

ryhaxcpt1#

我想出了一些有效的方法,但可能不是最优雅的解决方案。

RewriteEngine On

# Redirect HTTP traffic to HTTPS, except dir3 directory
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/dir1/dir2/dir3/
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
ymdaylpp

ymdaylpp2#

使用Redirect和RedirectMatch指令可以精确控制哪些区域强制为http,哪些区域强制为https。如果希望客户端浏览器缓存重定向,请对301重定向使用permanent关键字(如果它真的是永久性的),或对于302忽略它(临时)重定向。注意,当测试时,如果您使用永久,那么浏览器将缓存重定向,并且在此之后您所做的任何更改都不会被看到...清除浏览器中的重定向高速缓存可能是一种挫折。

<VirtualHost *:80>
    ServerName www.example.com

    # Redirect everything except /dir1/dir2/dir3 to use https
    RedirectMatch permanent "^(/(?!dir1/dir2/dir3/?).*)" https://www.example.com$1

    # config for the http://www.example.com/dir1/dir2/dir3/ stuff goes here
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com

    # Redirect /dir1/dir2/dir3 to use http
    Redirect permanent /dir1/dir2/dir3 http://www.example.com/dir1/dir2/dir3

    # config for the https://www.example.com/ stuff goes here
</VirtualHost>

为了保持整洁,您可能还需要example.com在端口80和端口443上重定向www.example.com,以确保始终可以从www.example.com访问您的站点www.example.com。您可以使用上面的VirtualHosts中的ServerAlias,但是指定重定向迫使客户端浏览器中的名称总是显示www.example.com,而不是显示请求来自的任何名称。大多数网站的偏好是强迫(重定向)每个人访问www.example.com。

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent /dir1/dir2/dir3 http://www.example.com/dir1/dir2/dir3
    Redirect permanent / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    Redirect permanent /dir1/dir2/dir3 http://www.example.com/dir1/dir2/dir3
    Redirect permanent / https://www.example.com/
</VirtualHost>

相关问题