.htaccess htaccessrewritecond

.htaccess htaccessrewritecond,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我们有一个域名和各种TLD 让我们使用example.com作为主URL,并将example.biz、example.net、example.org重定向到example.com 我们在.htaccess文件中有以下内容,它运行得非常好: RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 您注意到,任何非www将被重定向到www 然而,

我们有一个域名和各种TLD

让我们使用example.com作为主URL,并将example.biz、example.net、example.org重定向到example.com

我们在.htaccess文件中有以下内容,它运行得非常好:

RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
您注意到,任何非www将被重定向到www

然而,我们只是添加了一个子域:str.example.com,为了使其可访问,我们必须注释掉上面的规则

我希望有人能帮助我们编写规则,以重定向:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www|str)\.        [NC,OR]
RewriteCond %{HTTP_HOST} !\.com$              [NC]
RewriteCond %{HTTP_HOST}  (.*?)\.[A-Z]+$      [NC]
RewriteCond %1            ^(([^.]+)\.)?example$
RewriteCond %2            ^(str)              [OR]
RewriteCond www           ^(www)
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [R=301,L]
非www和非str到www 非.com TLD到.com 有几个案例可以说明我的方法:

example.com->www.example.com example.net->www.example.com abc.example.com->www.example.com str.example.com->str.example.com str.example.org->str.example.com 非常感谢。

试试这些规则:

RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.[^/.]+$
RewriteCond %1 !^(www|str)$
RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.([^/.]+)$
RewriteCond %2 !=com
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [L,R=301]
试试这些规则:

RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.[^/.]+$
RewriteCond %1 !^(www|str)$
RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.([^/.]+)$
RewriteCond %2 !=com
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [L,R=301]

这有点复杂,但它为您节省了一个潜在的额外重定向:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www|str)\.        [NC,OR]
RewriteCond %{HTTP_HOST} !\.com$              [NC]
RewriteCond %{HTTP_HOST}  (.*?)\.[A-Z]+$      [NC]
RewriteCond %1            ^(([^.]+)\.)?example$
RewriteCond %2            ^(str)              [OR]
RewriteCond www           ^(www)
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [R=301,L]

注意,它也只希望您有一个TLD,因此example.co.uk在这里不起作用。但这不是您的示例之一,因此我没有尝试对此进行解释。

这有点复杂,但它为您节省了一个潜在的额外重定向:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www|str)\.        [NC,OR]
RewriteCond %{HTTP_HOST} !\.com$              [NC]
RewriteCond %{HTTP_HOST}  (.*?)\.[A-Z]+$      [NC]
RewriteCond %1            ^(([^.]+)\.)?example$
RewriteCond %2            ^(str)              [OR]
RewriteCond www           ^(www)
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [R=301,L]

注意,它也只希望您有一个TLD,因此example.co.uk在这里不起作用。不过,这不是您的示例之一,因此我没有尝试解释它。

第四和第五秒的%1和%2是什么?上一个规则的括号之间的值?@Litso-是的,它们是对上一个正匹配的RewriteCond测试模式的反向引用。所以%1是捕获。*?,而%2是捕获[^.]+,来自前面两个相应的RewriteCond语句。啊,来自正匹配的模式,这解释了我没有掌握的部分。我学到了另一件事:谢谢你,蒂姆。如果我们有另一个子域,是否可以安全地假设我们可以将第一个cond更改为RewriteCond%{HTTP_HOST}^www | str | def\。[NC,OR]和第五个要重写的cond%2^str | www[OR]?再次感谢。另外,我为这件事感到抱歉editing@user173457-没问题。至于你的问题,我想你是指第二秒的str | def,但是是的,这样做应该允许你添加任何其他子域。第四秒和第五秒的%1和%2是什么?上一个规则的括号之间的值?@Litso-是的,它们是对上一个正匹配的RewriteCond测试模式的反向引用。所以%1是捕获。*?,而%2是捕获[^.]+,来自前面两个相应的RewriteCond语句。啊,来自正匹配的模式,这解释了我没有掌握的部分。我学到了另一件事:谢谢你,蒂姆。如果我们有另一个子域,是否可以安全地假设我们可以将第一个cond更改为RewriteCond%{HTTP_HOST}^www | str | def\。[NC,OR]和第五个要重写的cond%2^str | www[OR]?再次感谢。另外,我为这件事感到抱歉editing@user173457-没问题。至于你的问题,我想你是指第二次重写的str | def,但是是的,这样做应该允许你添加任何其他子域。