【问题标题】:How to ensure that Apache always serves a single page via HTTPS?如何确保 Apache 始终通过 HTTPS 提供单个页面?
【发布时间】:2011-01-18 13:44:55
【问题描述】:

我想将所有连接从 htt_p://www.example.com/abc.html 重定向到 HTTP_S://www.example.com/abc.html 。什么 mod_alias 或 mod_rewrite 命令适用于此?我试过了:

RewriteEngine on
RewriteCond %{HTTPS} =off
RewriteRule $abc\.html^ https://www.example.com/abc.html [R]

在 .htaccess 和 httpd.conf 中,但这不起作用。如果 RewriteRule 中的第一个字符串是其他任何字符串(如 abz.html),则它有效,但如果它是 abc.html,则无效。 abc.html 是服务器上的真实文件(不是另一个重定向)。选项 FollowSymlinks 存在于相应的目录指令中。

非常感谢。

【问题讨论】:

    标签: apache mod-rewrite ssl mod-alias


    【解决方案1】:

    以下内容将允许您将非 SSL 页面重定向到 SSL 版本(假设您在端口 443 上运行 SSL):

    RewriteEngine on
    
    # Limited redirects
    RewriteCond %{SERVER_PORT} !^443$
    RewriteCond %{REQUEST_URI} ^/abc\.html$ [OR,NC]
    RewriteCond %{REQUEST_URI} ^/def\.html$ [OR,NC]
    RewriteCond %{REQUEST_URI} ^/ghi\.html$ [NC]
    RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    

    RewriteCond 后面的 [OR] 标志字面意思是“或”,这就是为什么最后一个条件没有它的原因

    【讨论】:

    • 谢谢,但这仍然不能解决问题。它适用于适当地重定向 /aBc.html,但不适用于 abc.html。似乎如果 Apache 在那里看到真实文件,它会赋予真实文件优先于任何 RewriteRule 语句的优先级。即使文件存在,有没有办法强制它重定向?再次感谢!
    • 重写确实优先于真实文件,这意味着指令可能在其当前格式的错误位置。确切地说,您在哪里尝试过这些重写(即在目录的 .htaccess 中、在配置的 Directory 指令中、在配置的 VirtualHost 指令中)?另外,您能否发布匹配的完整网址以及不匹配的网址?
    • 好的,现在可以了。只要把它放在我的 httpd.conf 中就可以了。我认为问题在于我的浏览器正在缓存旧页面。感谢您的帮助,Cez!
    猜你喜欢
    • 2013-09-20
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2020-03-20
    • 2011-02-27
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多