强制 https 重定向会将所有 URL 重写到根目录,而不会附加 URL 的后半部分

强制 https 重定向会将所有 URL 重写到根目录,而不会附加 URL 的后半部分

我使用 .htaccess 中的以下内容强制将 http 转换为 https:

## Forcing https
RewriteCond %{HTTPS} !^on$
RewriteRule (.*) https://website.com/$1 [R,L]

接下来,我还进行了重定向,将用户从该站点的 Web 根目录重定向到子目录:

RedirectMatch ^/$ /subdirectory/

我遇到的一个问题是,当我启用上述 HTTPS 重定向时,以下 URL 不起作用(其中包括):

http://website.com/api/auctane

它只是重定向到https://website.com/subdirectory

因此我不得不放弃强制 HTTPS 才能允许访问 API URL。

我的问题:要重定向这个需要做什么:

http://website.com/api/auctane

更改为:

https://website.com/api/auctane

或者仅当用户专门访问 webroot 时才将用户重定向到 HTTPShttp://website.com/

答案1

如果您有权修改虚拟主机,那么您可能会发现在那里进行修改是最干净的。监听端口 80 的虚拟主机应该只执行一条重写规则,该规则会立即将所有内容重定向到 https:

<Virtualhost website.com:80>
    ....
    RewriteEngine on
    RewriteRule ^(.*)$ https://website.com$1 [R=301,L]
</Virtualhost>

由于该虚拟主机只能看到 HTTP(端口 80)的 URL,因此您只需盲目地将整个 URL 重定向到 HTTPS。

如果您需要在 .htaccess 文件中执行此操作,那么类似这样的操作应该可行。它与上面的类似,但 RewriteCond 告诉它仅查看 HTTP 流量。

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://website.com$1 [R,L]

相关内容