重定向不在apache中工作

时间:2013-03-02 12:59:12

标签: apache redirect

我配置了以下重定向:

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

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

但它没有重定向。我该如何排除故障?

3 个答案:

答案 0 :(得分:2)

常规调试:如果您可以访问apache配置本身,则可以启用RewriteLog,根据您设置的级别,可以为您提供匹配,当前值的逐步细分,和改动。

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

  

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

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

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

^/(myapp/login)

如果您想在两种情境中都匹配,请将前导/设为可选:

^/?(myapp/login)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我认为否定字典平等操作符可能存在一些问题。我无法在mod_rewrite文档或其他地方找到任何禁止此内容的内容,但我也没有看到使用!=的示例。事实上,文档表明它应该可以工作,但你可能会尝试匹配“关闭”而不是“不开启”,如下所示:

RewriteCond %{HTTPS} off

如果是这种情况,使用常规方法(例如,使用RewriteLog)进行故障排除将非常困难。