1

我配置了以下重定向:

<VirtualHost ...>
  <Directory ...>

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(myapp/login) https://%{HTTP_HOST}:443/$1 [NC,R=301,L]

但它不是重定向。我该如何解决它?

4

3 回答 3

2

一般调试:如果您有权访问 apache 配置本身,则可以启用RewriteLog哪个,取决于您设置的级别,可以为您提供匹配、当前值和更改的逐步细分。

这里发生的情况是整个host上下文中的 url 匹配存在差异(仅在 apache 的配置文件中可用)或.htaccess上下文的每个目录:

什么是匹配的?
VirtualHost上下文中,Pattern 最初将与URL 的主机名和端口之后以及查询字符串之前的部分进行匹配(例如“/app1/index.html”)。
Directory 和 htaccess context 中,模式最初将与文件系统路径匹配,在删除引导服务器到当前 RewriteRule 的前缀之后(例如“app1/index.html”或“index.html”,具体取决于指令的位置定义)。

两者之间的区别在于,在VirtualHost上下文中你有一个领先的/,在.htcaccess上下文中(网络上的大多数例子都假设因为它更容易获得)你没有那个领先/

简而言之,这里可行,但不适用于.htaccess

^/(myapp/login)

如果你想让它在两种情况下都匹配,请将前导设为/可选:

^/?(myapp/login)
于 2013-03-09T16:56:52.007 回答
1

对我来说,以下代码有效(我认为这与 != (如@jason 所说)和端口的组合有关。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(myapp/login) https://%{HTTP_HOST}/$1 [R=301,L,NC]
于 2013-03-09T02:28:10.087 回答
0

我认为否定字典相等运算符可能存在一些问题。我在 mod_rewrite 文档或其他地方找不到任何禁止这样做的内容,但我也没有看到使用!=. 事实上,文档表明它应该可以工作,但您可以尝试只匹配“off”而不是“not on”,如下所示:

RewriteCond %{HTTPS} off

如果是这种情况,使用通常的方法(例如,使用 )来排除故障将非常困难RewriteLog

于 2013-03-07T02:37:02.157 回答