【问题标题】:Rewrite specific rule (html url to php, with https)重写特定规则(html url 到 php,用 https)
【发布时间】:2016-12-10 06:58:27
【问题描述】:

我继承了一个项目,其中包含一个巨大的 htaccess 文件,对“.html” url 到 php 文件进行了大量的重写,如下所示:

RewriteRule ^login\.html$ login.php

我知道网站上有很多类似的问题,但在我的情况下没有一个有效,其中大多数只是 http -> https 重写/重定向。

我只想通过以下行为更改特定规则

1.- http://www.example.com/login.html --> 应该去 --> https://www.example.com/login.html

2.- https://www.example.com/login.html --> 应该映射到 login.php 文件(如上面的重写)。

首选 htaccess 解决方案,但也将不胜感激。

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:
    RewriteCond %{HTTPS} off
    RewriteRule ^login\.html$ https://www.example.com/login.html [R,L]
    
    RewriteCond %{HTTPS} on
    RewriteRule ^login\.html$ login.php
    

    另外,检查您的 .conf 文件,DocumentRoot*:80:443 VirtualHosts 相同,并且两者都有 AllowOverride All

    (一般来说,当您无权访问主服务器配置文件时,您应该只使用 .htaccess 文件。)

    【讨论】:

    • 我有,您有没有更好的解决方案?有没有办法避免硬编码域名? %{HTTP_HOST} 也许?
    • 是的,你可以使用%{HTTP_HOST}
    • 更好的解决方案是将这些规则放在 .conf 文件中。唯一的区别是模式应该以/开头,所以RewriteRule ^/login...
    • 第一次重写工作正常。第二个不是。它输出 404,看起来没有将 https url 映射到 php 文件。
    • 你可以试试用斜杠RewriteRule ^login\.html$ /login.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多