如何制定使用子域名重写 URL 的 mod_rewrite 规则?
我想要做的是这样的:
转发请求 FROM http://agency1.company.com 到: https://appname.company.com/appname/login.jsp?agencyName=agency1
它不需要是实时代理;它可以只是元刷新类型的东西或基本的 URL 转发。这似乎是一个常见的场景,但我在互联网上找不到示例。网络上有很多关于 URI 重写的示例,但关于完整 URL 重写的示例并不多(正如我上面尝试做的那样)。
答案1
为此,您可以使用反向引用。
RewriteEngine On
RewriteCond %{HTTP_HOST} ([^\.]+)\.domain\.com [NC]
RewriteRule ^(.*)$ https://appname.company.com/appname/login.jsp?agencyName=%1 [R=301,L]
但是,请注意,一旦遵循 301,这将再次重定向,如果要在 HTTP 上进行重定向,则仅使用以下块。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ([^\.]+)\.domain\.com [NC]
RewriteRule ^(.*)$ https://appname.company.com/appname/login.jsp?agencyName=%1 [R=301,L]
%1 指的是 RewriteCond 行中的第一个正则表达式“捕获”,如果您要使用多个点,则 %2 等等将变得可用。
答案2
您可以在 HTTP_HOST 值上使用 RewriteCond 来执行此操作。Apache URL 重写指南。你可以这样做:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.company\.com$
RewriteRule (.*) https://appname.company.com/$1?agencyName=%1 [R,L,QSA]
这尚未经过测试,并且可能无法按原样工作,但应该可以为您指明正确的方向。