Apache 如何将非www和带有特定子文件夹的www域重定向到根目录?

Apache 如何将非www和带有特定子文件夹的www域重定向到根目录?,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有3个域名: www.domain1.com www.domain2.com www.domain3.com www.domain1.com/sub1/sub2 www.domain2.com/sub1/sub2 www.domain3.com/sub1/sub2 www.domain1.com/sub1/sub2 --> www.domain1.com domain1.com/sub1/sub2 --> www.domain1.com www.domain2.com/s

我有3个域名:

www.domain1.com
www.domain2.com
www.domain3.com
www.domain1.com/sub1/sub2
www.domain2.com/sub1/sub2
www.domain3.com/sub1/sub2
www.domain1.com/sub1/sub2  --> www.domain1.com
domain1.com/sub1/sub2 --> www.domain1.com


www.domain2.com/sub1/sub2  --> www.domain2.com
domain2.com/sub1/sub2 --> www.domain2.com


www.domain3.com/sub1/sub2  --> www.domain3.com
domain3.com/sub1/sub2 --> www.domain3.com
它们都共享相同的子文件夹URL:

www.domain1.com
www.domain2.com
www.domain3.com
www.domain1.com/sub1/sub2
www.domain2.com/sub1/sub2
www.domain3.com/sub1/sub2
www.domain1.com/sub1/sub2  --> www.domain1.com
domain1.com/sub1/sub2 --> www.domain1.com


www.domain2.com/sub1/sub2  --> www.domain2.com
domain2.com/sub1/sub2 --> www.domain2.com


www.domain3.com/sub1/sub2  --> www.domain3.com
domain3.com/sub1/sub2 --> www.domain3.com
我需要将sub2及其下的所有内容重定向到站点主页:

www.domain1.com
www.domain2.com
www.domain3.com
www.domain1.com/sub1/sub2
www.domain2.com/sub1/sub2
www.domain3.com/sub1/sub2
www.domain1.com/sub1/sub2  --> www.domain1.com
domain1.com/sub1/sub2 --> www.domain1.com


www.domain2.com/sub1/sub2  --> www.domain2.com
domain2.com/sub1/sub2 --> www.domain2.com


www.domain3.com/sub1/sub2  --> www.domain3.com
domain3.com/sub1/sub2 --> www.domain3.com
以下是我目前掌握的信息:

RewriteCond %{HTTP_HOST} ^domain1\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.domain1\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^domain2\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.domain2\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^domain3\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.domain3\.com$ [NC]
RewriteRule ^sub1/sub2(.*)$ / [NC,L,R=301]
问题:
它只适用于
www.domain1.com、www.domain2.com、www.domain3.com

它不适用于没有“www”的url。所以不起作用:
domain1.com/sub1/sub2

谢谢

您可以尝试以下方法:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?(domain1|domain2|domain3)\.com
RewriteCond %{REQUEST_URI}  ^/sub1/sub2/?  [NC]
RewriteRule .*   http://%{HTTP_HOST}/     [R=301,L]
使用此方案重定向任何URL

http://www.domain1.com/sub1/sub2
http://domain1.com/sub1/sub2

到相应的根,删除段
/sub1/sub2

我假设
/sub1/sub2
是固定字符串。如果没有,请更换

RewriteCond %{REQUEST_URI}  ^/sub1/sub2/?  [NC]


必须保留路径
/sub1/sub2/
中包含两个文件夹的URL方案,才能使规则正常工作。

将其简化为一个条件
RewriteCond%{HTTP\u HOST}^(www\)?(domain1 | domain2 | domain3)\.com$[NC]
,并使用与您相同的
RewriteRule
。同样的问题,还是有效?谢谢你的回复。但是,条件的执行方式与我的原始规则相同。所以非www域仍然无法正确重定向。我使用指定的/sub1/sub2/文件夹路径尝试了这一点。它似乎不起作用。这条规则似乎就是问题所在:
RewriteCond%{REQUEST\u URI}^/sub1/sub2/?$[NC]
当更改为如下时,它与我的原始规则一样工作:
RewriteCond%{REQUEST\u URI}^/sub1/sub2(.*)$[NC]
同样要澄清的是,这些规则是我的htaccess文件中唯一的条目,因此没有其他规则可以成为影响这些规则的因素。而且。。。我使用XAMPP v3.1.0作为apache虚拟主机设置的环境,域指向此htaccess文件所在的根目录。在我的主机文件中,这些域都指向127.0.0.1。请您将用于测试的完整URL复制粘贴到注释中,好吗?我不能公开这些域名。但是,我假设字符串文字在正则表达式中的工作方式相同。下面是URL的样子(域和子文件夹只是小写的a-z,没有花哨的字符):
http://www.domain1.com/sub1/sub2/something_random
和非www URL版本:
http://domain1.com/sub1/sub2/something_random
其中随机的东西可以是任何东西。只要它有
/sub1/sub2/
,它就应该被重定向。不需要披露私人信息。只有模式才重要,这是第一个问题:
/sub1/sub2/something\u random
方案与您问题中的方案不同。使用重定向时,没有明显的问题。无论如何,我修改了我的答案来使用这个URL方案,只要没有其他不同,它就会工作。例如,我认为本地服务器无法复制您在问题中描述的URL结构。也许您应该直接在web服务器中进行测试,或者根据实际需求和测试条件更新问题。