Apache重写规则 - 防止重写的URL出现在浏览器URL栏中

时间:2012-04-26 19:37:21

标签: apache mod-rewrite url-rewriting

我有一个重写规则,正在寻找一个特定的URI。当它与特定URL匹配时,它会使用适当的文件路径重写它,以便找到所需的内容。然后它将协议更改为HTTPS并允许请求通过。

我有两个问题;

  1. 我不希望重写的路径出现在用户浏览器中 - 我想维护虚荣网址
  2. 我确实希望HTTPS协议显示为用户指示他们通过安全连接访问该站点。
  3. 我尝试了几种选择但没有成功。如果我包含[R]标志,则URL和协议保持不变,但这不是所需的效果

    关于我如何实现这一目标的任何建议?

    这是我的规则;

    RewriteMap redirectsIfSecure txt:/myserver/content/secure_urls.txt
    RewriteCond ${lowercase:%{REQUEST_URI}} ^/(.+)$
    RewriteCond ${redirectsIfSecure:%1|NOT_FOUND} !NOT_FOUND
    RewriteRule ^(.*)$ https://myserver.com${redirectsIfSecure:%1} [PT]
    

1 个答案:

答案 0 :(得分:3)

来自mod_rewrite文档:

  

如果指定了绝对URL,mod_rewrite将检查是否存在   hostname与当前主机匹配。如果是,则为方案和主机名   被剥离,结果路径被视为URL路径。   否则,将对给定的URL执行外部重定向。至   强制外部重定向回当前主机,请参见[R]标志   下方。

如果您将请求重写为与http://不匹配的完全限定网址(即以https://ServerName等开头的任何内容),则{{1将发出HTTP重定向,这将导致客户端浏览器从新位置请求资源。

如果您不想在http和https之间切换,可以使用代理规则(mod_rewrite标志)让Apache代表客户端发出请求并返回结果,从而屏蔽重写URL。

但是,如果您尝试从http升级到https(或其他方式),则总是需要客户端重定向。