我有一个重写规则,正在寻找一个特定的URI。当它与特定URL匹配时,它会使用适当的文件路径重写它,以便找到所需的内容。然后它将协议更改为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]
答案 0 :(得分:3)
来自mod_rewrite文档:
如果指定了绝对URL,
mod_rewrite
将检查是否存在 hostname与当前主机匹配。如果是,则为方案和主机名 被剥离,结果路径被视为URL路径。 否则,将对给定的URL执行外部重定向。至 强制外部重定向回当前主机,请参见[R]标志 下方。
如果您将请求重写为与http://
不匹配的完全限定网址(即以https://
,ServerName
等开头的任何内容),则{{1将发出HTTP重定向,这将导致客户端浏览器从新位置请求资源。
如果您不想在http和https之间切换,可以使用代理规则(mod_rewrite
标志)让Apache代表客户端发出请求并返回结果,从而屏蔽重写URL。
但是,如果您尝试从http升级到https(或其他方式),则总是需要客户端重定向。