为什么我的mod_rewrite不会像HTTP那样适用于HTTPS

时间:2011-06-07 12:23:49

标签: apache http mod-rewrite https

我很抱歉这些帖子中的另一篇,但据我所知,我的问题不同于流行的http - > https重定向到那里。

我想

      redirect all http://www.mydomain.com traffic to https://www.mydomain.com/wiki

      redirect https://www.mydomain.com   to   https://www.mydomain.com/wiki

请注意我的第一个重定向目标中的https。

对于第一次重定向,我可以通过放置:

来实现这一目标
RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

在我的httpd.conf文件中重新启动。

我认为这对我的https://尝试也有效。请注意,我不包括

RewriteCond %{HTTPS} !=on

或类似的东西。然而,仍然https://www.mydomain.com将我发送到我的服务器根目录中的index.html文件。

如果我尝试将上述Rewrite指令放在我的httpd-ssl.conf文件中并重新启动服务器,那么我将获得无限重定向。

我做错了什么?

注意:对于它的价值,/ wiki是/ home / Users / myusername / www / wiki(wiki的绝对路径)的别名

更新

重新讨论到目前为止我尝试过的事情:

尝试1:

在httpd.conf中:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

在httpd-ssl.conf中:

Nothing Rewrite related

结果1:

将所有http流量重定向到https://www.mydomain.com/wikihttps://www.mydomain.com

没有任何作用

尝试2:

在httpd.conf中:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

在httpd-ssl.conf中:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

结果2:

无限重定向。

尝试3:

在httpd.conf中:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule !^wiki https://%{SERVER_NAME}/wiki [R,L]

在httpd-ssl.conf中:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule !^wiki https://%{SERVER_NAME}/wiki [R,L]

结果3:

无限重定向。

3 个答案:

答案 0 :(得分:1)

您的规则将匹配每个请求(甚至/wiki)。尽量排除:

RewriteRule !^wiki https://%{HTTP_HOST}/wiki [R,L]

答案 1 :(得分:1)

无限重定向来自于规则与第一个客户端请求(例如http://..。)和任何后续请求匹配的事实。

您最好使用重写规则,该规则排除匹配中的wiki路径,例如

RewriteRule !^wiki https://%{HTTP_HOST}/wiki [R,L]

或者你可以通过RewriteCond获得更好的性能

RewriteCond %{REQUEST_URI} !^wiki

在现有规则之前。这样可以更轻松地添加您在示例中当前具有的更复杂的模式(如果您需要稍后在项目中使用)。

答案 2 :(得分:0)

我找到了一个可能不是最强大的解决方案,但它对我有用。

在我的httpd-ssl.conf文件中,在VirtualHost容器下,我将DocumentRoot设置为指向我一直尝试重定向到的目录。

<VirtualHost _default_:443>
DocumentRoot "path on my HD where I wanted to redirect all along"
ServerName    All the usual stuff...
...

这会处理https交易的“重定向”(不再重定向)

对于http(非ssl)我放在httpd.conf中:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

这似乎是这样做的。