Apache mod重写规则问题

时间:2011-12-07 16:49:19

标签: apache mod-rewrite apache-config

我正在尝试为我的apache服务器编写mod_rewrite规则。我的要求是我在服务器上有三个Web应用程序,其中所有对HTTP方案的请求都应该重定向到HTTPS。

这是我写的:

RewriteEngine On

RewriteCond $1 ^abc$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R]

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R]

这似乎没有正常工作。我正在尝试使用 abc 上下文根运行应用程序以在HTTP上运行,并将所有其他请求重定向到HTTPS URL。

谁能告诉我我做错了什么。

1 个答案:

答案 0 :(得分:1)

我发现你的第一条规则有几个问题:

  1. 规则可能不匹配,因为REQUEST_URI为/abc,而非abc
  2. 如果规则匹配,则会有无限重定向循环,导致客户端出现500内部服务器错误,并且日志中出现“超出限制重定向”错误。问题是规则目标与原始请求相同,因此它将进入重定向循环。
  3. 我建议删除第一条规则,并将/ abc排除添加到第二条规则:

    RewriteEngine On
    
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/abc$ [NC]
    RewriteRule $ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
    

    如果您还想强制/ abc使用HTTP而不是HTTPS,那么您可以添加第二条规则:

    RewriteCond %{HTTPS} on
    RewriteCond %{REQUEST_URI} ^/abc$ [NC]
    RewriteRule $ http://%{HTTP_HOST}%{REQUEST_URI} [L,R]