htaccess子域到子域/子文件夹

时间:2016-09-29 07:42:51

标签: .htaccess redirect subdomain

这让我发疯了。基本上,我想重定向以下内容:

http://subdomain.mysite.com/(带或不带斜线) 到(确切地说) http://subdomain.mysite.com/subdomain/

目前这给我一个无限循环

    RewriteCond %{HTTP_HOST} ^subdomain\.mysite\.com$ [NC]  
    RewriteRule ^(.*)$ subdomain/$1 [R=301]

但无论我尝试什么规则,它总是以循环结束,因为目标仍然符合重定向标准。一些帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

你需要添加一个条件来打破无限循环。

请注意,只有在您确实希望保持主机名不变的情况下才会出现此循环,因此请在同一主机内重写,但仍按照建议进行外部重定向。这有点令人惊讶,但肯定是可能的:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]  
RewriteCond %{REQUEST_URI} ^/subdomain/ [NC]
RewriteRule ^(.*)$ subdomain/$1 [L,R=301,QSA]

这实现了外部重定向,需要附加条件来阻止重定向循环:

https://subdomain.example.com/foo> https://subdomain.example.com/subdomain/foo

如果您重写为另一个主机名,会出现相同的循环:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]  
RewriteRule ^(.*)$ https://www.example.com/subdomain/$1 [L,R=301,QSA]

这实现了外部重定向,没有需要附加条件,因为现有的已经阻止了重定向循环:

https://subdomain.example.com/foo> https://www.example.com/subdomain/foo

更常见的方法是仅重写内部,因此无需实际更改浏览器中可见的URL:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]  
RewriteCond %{REQUEST_URI} ^/subdomain/ [NC]
RewriteRule ^(.*)$ subdomain/$1 [L,QSA]

这实现了内部重定向,因此客户端中的可见 URL保持不变:

https://subdomain.example.com/foo> /子域/富

答案 1 :(得分:0)

似乎根本不起作用。我知道它有点奇怪,但由于遗留原因。整个服务器mysite.com很旧,仅用于存档目的 - 并且需要授权才能访问。除了仍需要访问的/ subdomain文件夹。 mysite.com和subdomain.mysite.com指向同一主目录(历史原因..)

使用此设置http://subdomain.mysite.com/subdomain/效果非常好......但有人真的希望http://subdomain.mysite.com/能够正常工作

这是我目前的htaccess

<FilesMatch "index.php">
   AuthName "Protected Area"
   AuthType Basic
   AuthUserFile /home/www/.htpasswd
   require valid-user
</FilesMatch> 

#PIE.htc
AddType text/x-component .htc

RewriteEngine on
RewriteBase /


RewriteCond %{HTTP_HOST} ^subdomain\.mysite\.com$ [NC]  
RewriteCond %{REQUEST_URI} ^/subdomain/ [NC]
RewriteRule ^(.*)$ subdomain/$1 [L,R=301,QSA]  

#more rules here 

在/ subdomain文件夹中我只想说

Satisfy Any

答案 2 :(得分:0)

好吧......我使用www。!

进行外部重定向
RewriteCond %{HTTP_HOST} ^subdomain\.mysite\.com$ [NC]  
RewriteRule ^(.*)$ http://www.subdomain.mysite.com/subdomain/$1 [L,R=301,QSA]

问题是,http://subdomain.mysite.com/subdomain/现在重定向到http://www.subdomain.mysite.com/subdomain/subdomain/ - 所以我在subdomain / subdomain /文件夹中设置了php重定向... 它似乎很乱,但是当你打开subdomain.mysite.com时,网站是可见的:)