Apache 如何将非www和带有特定子文件夹的www域重定向到根目录?
我有3个域名: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
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服务器中进行测试,或者根据实际需求和测试条件更新问题。