我使用 .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]