.htaccess - 重定向到域并处理 URL 参数

.htaccess - 重定向到域并处理 URL 参数

努力寻找处理此问题的最佳方法。我们目前使用以下 htaccess 代码来生成更漂亮的 URL:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ?id=$1 [QSA]
##Force SSL 
RewriteCond %{HTTP:X-Forwarded-Proto} !https

这允许我们使用类似https://domain1.com/i-1234567890并在浏览器中显示,但页面显示为https://domain1.com/?id=i-1234567890

我们希望继续这样做,但也希望整合域名。所有 3 个域名都已通过 CNAME DNS 条目托管在同一台服务器上,但希望只使用一个域名,其他域名重定向。

解决此问题的最佳方法是什么?例如: http://domain2.com/i-1234567890http://domain3.com/i-1234567890两条路线http://domain1.com/i-1234567890同时仍处理 QSA 并强制 https?

我还要补充一点,由于这台服务器只提供这些域名的服务,因此将所有流量重定向到http://domain1.com/i-1234567890而不是为每个域设置 RewriteCond。我尝试过几种方法,但都导致过多的重定向。

谢谢!

答案1

与您想要的内容进行匹配%{HTTP_HOST},并将不匹配的请求重定向到所需的服务器。

在其后添加如下内容RewriteEngine On

RewriteCond "%{HTTP_HOST}" !="domain1.com" [NC]
RewriteRule "^(.*)$" "https://domain1.com/$1" [R=301,L]

第一行检查 HTTP Host: 标头是否不等于([NC]-> 不区分大小写)与domain1.com完全相等。如果标头不同,例如domain2.com,则满足条件并应用第二行的规则。

该规则采用整个路径(^(.*)$正则表达式)并将其重定向([R=301]HTTP Moved Permanently)到https://domain1.com/$1$1 表示与前一个正则表达式匹配的原始路径的所有内容。[L]意味着它是最后一条应用的规则,因此 Apache 停止处理 htaccess 文件。

当请求到达时https://domain1.com/blabla,条件不满足且规则不适用,因此将处理 htaccess 的其余部分。

因此新的 htaccess 应该是这样的:

RewriteEngine On
RewriteCond "%{HTTP_HOST}" !="domain1.com" [NC]
RewriteRule "^(.*)$" "https://domain1.com/$1" [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ?id=$1 [QSA]
##Force SSL 
RewriteCond %{HTTP:X-Forwarded-Proto} !https

相关内容