2016-09-29 5 views
0

Это сводит меня с ума. В принципе, я хочу, чтобы перенаправить следующее:htaccess subdomain to subdomain/subfolder

http://subdomain.mysite.com/ (с или без пробелов) до (точно) http://subdomain.mysite.com/subdomain/

Это в настоящее время дает мне бесконечный цикл

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

Но независимо от того правила I попробуйте, он всегда заканчивается в цикле, потому что цель по-прежнему соответствует критериям переадресации. Некоторая помощь будет оценена по достоинству.

+0

Конечно, вам нужно добавить условие остановки цикла. – arkascha

ответ

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>/поддомен/Foo

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 

И в папке/субдомена Я просто говорю

Satisfy Any 
0

AllRight ... Я получил его работайте с внешним перенаправлением с 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/ - поэтому я настроить PHP перенаправления в подобласти/поддомена/папку ... , кажется, грязный, но сайт виден, когда вы открываете subdomain.mysite. com :)

+0

Конечно, это возможно, но _why_? – arkascha