如何使用IIS URL重写模块实现不同域名间的URL完整重定向?
域名前缀重定向实现方案
需求匹配说明
本方案可实现仅替换域名前缀exe为example,完整保留原请求的协议、路径、查询参数,示例效果:
原请求地址:https://exe.test.dir.com/xyz/ref?function=view
重定向后地址:https://example.test.dir.com/xyz/ref?function=view
Nginx 配置
在exe域名对应的server配置块中添加如下规则:
server { listen 80; listen 443 ssl; # 匹配所有exe前缀的域名,若为固定域名可直接写死如exe.test.dir.com server_name exe.*; # 请自行补充ssl证书相关配置 # ssl_certificate your_cert.pem; # ssl_certificate_key your_cert.key; # 301永久重定向,如需临时重定向将permanent改为redirect即可 rewrite ^ $scheme://example.$host$request_uri? permanent; }
$scheme自动继承原请求的http/https协议$request_uri完整保留原请求的路径+查询参数,末尾的?用于避免Nginx自动重复追加查询参数
Apache 配置(.htaccess)
在exe域名对应站点的根目录.htaccess文件中添加规则:
RewriteEngine On # 匹配所有exe前缀的域名,NC表示不区分大小写 RewriteCond %{HTTP_HOST} ^exe\.(.*)$ [NC] # 301永久重定向,QSA表示保留原有查询参数,需临时重定向改为R=302即可 RewriteRule ^(.*)$ %{REQUEST_SCHEME}://example.%1/$1 [L,R=301,QSA]
%1自动捕获域名除前缀外的剩余部分QSA标志保证原有查询参数完整传递
IIS 配置
需先安装IIS官方URL重写模块,在站点的web.config中添加如下规则:
<rule name="ExeToExampleRedirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" pattern="^exe\.(.*)$" /> </conditions> <action type="Redirect" url="{REQUEST_SCHEME}://example.{C:1}/{R:1}" redirectType="Permanent" appendQueryString="true" /> </rule>
appendQueryString="true"保留所有原有查询参数redirectType="Permanent"对应301永久重定向,改为Found即为302临时重定向
内容的提问来源于stack exchange,提问作者Sanika
相关产品推荐
相关产品推荐

