我彻底搜索了stackoverflow,发现了大约100个mod_rewrite-questions,但是这个没有被覆盖......奇怪,因为它看起来很常见。
我的问题:我在主域(mywebapp.com)上有一个网络应用程序。现在我还有其他特定国家/地区的TLD(例如.ch),我想在.com域重定向。到目前为止没什么特别的。但现在到了其他标准:
要求
实施例
所以要把它们放在一起的例子:
(url中的空格是故意阻止stackoverflow生成链接)
等等。我真的只需要以协议通用的方式替换TLD。如果规则集符合SEO(301),那当然会很好。
其他信息/详细信息
域名目前设置为指向我具有root访问权限的同一个Web服务器/ IP。服务器由ISPConfig管理,但我也可以手动编辑虚拟主机。
提前谢谢!
欢呼声, 帕斯卡
答案 0 :(得分:2)
我遇到了这个脚本的问题。
例如,它可以正常工作,如:
domain.net => domain.com
domain.net/something => domain.com/something
但是当我尝试使用子域名和不同的顶级域名时,会发生这种情况
sub.domain.org => subdomain.com
但是
sub.domain.com => sub.domain.com
所以我更改了代码,这是我的版本工作:
RewriteCond %{HTTP_HOST} !.*\.com
RewriteCond %{HTTPS} ^on
RewriteCond %{HTTP_HOST} (?:([^.]+\.))?mywebapp\..*
RewriteRule ^.* https://%1mywebapp.com%{REQUEST_URI} [R=302,L]
RewriteCond %{HTTP_HOST} !.*\.com
RewriteCond %{HTTPS} !^on
RewriteCond %{HTTP_HOST} (?:([^.]+\.))?mywebapp\..*
RewriteRule ^.* http://%1mywebapp.com%{REQUEST_URI} [R=302,L]
希望这有助于某人, RT-2
P.S。我会在当前的答案中添加我的评论,但是由于某种原因,我说我没有足够的声誉。
答案 1 :(得分:0)
我认为以下方法可以解决问题:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !.*\.com
RewriteCond %{HTTPS} ^on
RewriteCond %{HTTP_HOST} (?:([^.]+)\.)?mywebapp\..*
RewriteRule ^.* https://%1mywebapp.com%{REQUEST_URI} [R=302,L] #removed double slash
RewriteCond %{HTTP_HOST} !.*\.com
RewriteCond %{HTTPS} !^on
RewriteCond %{HTTP_HOST} (?:([^.]+)\.)?mywebapp\..*
RewriteRule ^.* http://%1mywebapp.com%{REQUEST_URI} [R=302,L] #removed double slash
这就是它的意思:
RewriteRule
不包含 .com %{HTTP_HOST}
$1
引用).com
,在其前面加上子域名,连接%{REQUEST_URI}
,然后重定向(我将其保留为302 Temporary Redirect
,以便您可以根据需要使用它。我会去到301
,直到你100%准备好了)编辑:我复制了规则集来处理协议问题。所以显然你只能得到最后一个反向引用。这意味着当协议是https时,它将覆盖存储在%1
反向引用中的子域。通过为任一协议设置规则集,您可以避免该问题。可能不是最漂亮的方式,但它应该完成工作。
答案 2 :(得分:0)
我的问题没有什么不同,但我的印象是RewriteRule导致协议从https切换到http,即使我的canonicalname为on。 当LTM正在执行SSL卸载时,为我做这个技巧的属性是 RequestHeader set ClientProtocol https 。
Listen 8085
<VirtualHost *:8085>
UseCanonicalName On
ServerName https://vip-name
ProxyPreserveHost On
RequestHeader set ClientProtocol https
RewriteEngine On
#RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/abc$
RewriteCond %{REQUEST_URI} ^/xyz$
RewriteRule ^ - [skip=1]
RewriteRule ^/xyz$ https://vip-name/xyz/bc/gui/xyz/language=EN$1 [R,L]
RewriteRule ^/xyz(.*) http://ip1:8085$0 [P,NC]
RewriteRule ^/(.*) http://ip2:8086$0 [P,NC]
</VirtualHost>