apache 重写规则 https 到目录

apache 重写规则 https 到目录

我想要 Apache:

  1. 将 http 用户重定向到 https
  2. 如果他们访问 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://。似乎效果不错。

相关内容