Apache 将所有通信重定向到HTTPS,但一个目录应强制HTTP

Apache 将所有通信重定向到HTTPS,但一个目录应强制HTTP,apache,.htaccess,Apache,.htaccess,我试着重写了很多帖子中的条件,但似乎没有一个起作用 我想在整个网站上强制使用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 RewriteR

我试着重写了很多帖子中的条件,但似乎没有一个起作用

我想在整个网站上强制使用
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]

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

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]

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

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]

使用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>

服务器名www.example.com
#重定向除/dir1/dir2/dir3之外的所有内容以使用https
重定向匹配永久“^(/(?!dir1/dir2/dir3/?)。”https://www.example.com$1
#配置http://www.example.com/dir1/dir2/dir3/ 这里有东西
服务器名www.example.com
#重定向/dir1/dir2/dir3以使用http
重定向永久/dir1/dir2/dir3http://www.example.com/dir1/dir2/dir3
#配置https://www.example.com/ 这里有东西
为了保持整洁,您可能还需要在端口80和端口443上重定向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>

ServerName example.com
重定向永久/dir1/dir2/dir3http://www.example.com/dir1/dir2/dir3
重定向永久/https://www.example.com/
ServerName example.com
重定向永久/dir1/dir2/dir3http://www.example.com/dir1/dir2/dir3
重定向永久/https://www.example.com/

使用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>

服务器名www.example.com
#重定向除/dir1/dir2/dir3之外的所有内容以使用https
重定向匹配永久“^(/(?!dir1/dir2/dir3/?)。”https://www.example.com$1
#配置http://www.example.com/dir1/dir2/dir3/ 这里有东西
服务器名www.example.com
#重定向/dir1/dir2/dir3以使用http
重定向永久/dir1/dir2/dir3http://www.example.com/dir1/dir2/dir3
#配置https://www.example.com/ 这里有东西
为了保持整洁,您可能还需要在端口80和端口443上重定向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>

ServerName example.com
重定向永久/dir1/dir2/dir3http://www.example.com/dir1/dir2/dir3
重定向永久/https://www.example.com/
ServerName example.com
重定向永久/dir1/dir2/dir3http://www.example.com/dir1/dir2/dir3
重定向永久/https://www.example.com/