2

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

我有两个问题;

  1. 我不希望重写的路径出现在用户浏览器中 - 我想维护虚名 url
  2. 我确实希望 HTTPS 协议向用户表明他们正在通过安全连接访问该站点。

我尝试了几个选项,但没有成功。如果我包含 [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]
4

1 回答 1

3

从 mod_rewrite 文档:

如果指定了绝对 URL,则mod_rewrite检查主机名是否与当前主机匹配。如果是这样,则方案和主机名将被删除,并且生成的路径将被视为 URL 路径。否则,将对给定 URL 执行外部重定向。要强制将外部重定向回当前主机,请参见下面的 [R] 标志。

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

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

但是,如果您尝试从 http 升级到 https(或相反),这将始终需要客户端重定向。

于 2012-04-26T19:44:18.023 回答