![apache 重写规则 https 到目录](https://linux22.com/image/800730/apache%20%E9%87%8D%E5%86%99%E8%A7%84%E5%88%99%20https%20%E5%88%B0%E7%9B%AE%E5%BD%95.png)
我想要 Apache:
- 将 http 用户重定向到 https
- 如果他们访问 http(s)://example.com/1234 重定向到 /view/1234
我尝试了不同的方法,但都无法正常工作。当用户访问网站时,他们会被重定向到 https://,但我无法让 /{numeric} 重定向到添加 /view/。在我启用 https 重定向之前,数字规则一直运行正常。
我已尝试使用 RewriteCond %{HTTPS} = on,但这会导致 500 错误。
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://domain.example.org/$1 [R,L]
RewriteRule ^(\d+)$ https://domain.example.org/view/$1 [R=301,L]
答案1
用以下代码替换第一个 RewriteCond:
RewriteCond %{SERVER_PORT} !^443$
答案2
这对你不起作用吗?
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
尝试一下这个来测试一下:
http://htaccess.madewithlove.be/
好的,听起来你实际上想要这样的东西:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{REQUEST_URI} /1234
RewriteRule (.*) https://%{HTTP_HOST}/view%{REQUEST_URI} [L]
答案3
这将是即兴的回答,但我相信重写规则是先到先得的。由于路径结构发生变化,我敢打赌你的http://domain.example.org/1234用户被重定向到 https 等效项,但没有路径更改。尝试切换规则的顺序,您将更接近完整的解决方案。
如果这不起作用,请告诉我,我将启动一个 Apache 实例,然后我们看看是否可以协同工作。
答案4
感谢您的帮助。
我终于让它工作了。我使用了以下内容:
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://domain.example.org/$1 [R,L]
RewriteRule ^([0-9]+)/?$ https://%{HTTP_HOST}/view/$1 [NC,L]
因此,任何数字请求都添加了 /view,任何使用 http:// 访问网站的尝试都会被转发到 https://。似乎效果不错。