Apache 使用贪婪匹配重写规则,尝试将根目录重定向到页面,并将所有其他请求重写为https

Apache 使用贪婪匹配重写规则,尝试将根目录重定向到页面,并将所有其他请求重写为https,apache,mod-rewrite,url-rewriting,Apache,Mod Rewrite,Url Rewriting,我正在尝试使用apache2重写来执行两个功能 重写(或重定向)/(根目录)请求到特定页面:/index 端口80上的所有请求(包括/和/索引)都将重写为HTTPS 这是我失败的尝试 RewriteEngine On RewriteRule ^$ https://%{HTTP_HOST}%/index [R] RewriteCond %{REQUEST_URI} !^$ RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HO

我正在尝试使用apache2重写来执行两个功能

  • 重写(或重定向)/(根目录)请求到特定页面:/index
  • 端口80上的所有请求(包括/和/索引)都将重写为HTTPS
  • 这是我失败的尝试

    RewriteEngine On
    
    RewriteRule ^$ https://%{HTTP_HOST}%/index [R]
    
    RewriteCond %{REQUEST_URI} !^$
    
    RewriteCond %{HTTPS} off
    
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
    我的猜测是,最后一条规则过于激进/贪婪(所有内容都在重写为https)-因此我试图通过添加一个不匹配根的RewriteCond来阻止根匹配,但它不起作用

    编辑:我的方法错了吗?规则/条件中是否存在明显错误

    重写cond%{REQUEST_URI}^$


    这将始终匹配,%{REQUEST_URI}没有从中删除当前的每个目录前缀,就像您匹配每个目录重写规则所依据的隐式内容一样。下面添加斜杠。

    为完整起见,这里是最终配置:

    RewriteEngine On
    RewriteRule ^$ https://%{HTTP_HOST}%/index
    RewriteCond %{REQUEST_URI} !^/$
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    

    想对否决票发表评论吗?我很乐意澄清这个问题,或者对提出的建议重新措辞。