2013-05-05 4 views
0

У меня есть локальный сервер Apache, настроенный на моей машине, с подстановочным DNS на месте. Я настроил его так, чтобы он работал как [foldername].loc. Так, например, папка под моей папкой htdocs с именем MyDomain будет доступна через mydomain.loc. Этот код работает отлично, и код в моем .htaccess в моем htdocs ниже:Переписать субдомен в подпапку вызывает ошибку цикла или 403

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]*\.)?([a-z0-9-]+)\.loc$ [NC] 
RewriteCond %3::%{REQUEST_URI} !^(.*?)::/\1/? 
RewriteRule (.*) /%3/$1 [PT,QSA] 

Теперь, приведенный выше код также проходит через субдомены, такие как «john.mydomain.loc». Теперь у меня есть следующая структура папок в папке MyDomain:

MyDomain 
    - active 
     - index.php 
    - working 
     - index.php 
    .htaccess 

В .htaccess из MyDomain имеет следующий код:

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^live\.mydomain\.loc$ [NC] 
RewriteRule ^(.*)$ /active/$1 [L] 

Что это должно делать, если я правильно понимаю, это взять http://live.mydomain.loc/ и переписать его как http://mydomain.loc/active/. Обратите внимание, что я сказал rewrite, а не redirect.

С выше коде, однако, я получаю сообщение в журнале ошибок Apache:

[client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace. 

Если я изменяю .htaccess из MyDomain следующим образом:

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^live\.mydomain\.loc$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /active/$1 [L] 

Когда я использую этот код, он всегда приходит с ошибкой 403, заявив, что у меня нет разрешения на просмотр папки /mydomain/. Если я установил Options +Indexes, я вижу только индекс папки /mydomain. Так где же по линии выше код не работает?

Я также пробовал вышеуказанный код с RewriteCond %{REQUEST_URI} !^/active/. Это не повлияло на результаты.

Я пробовал это более двух дней, и я не могу понять это. Я надеюсь, что блестящие умы StackOverflow помогут понять это. :)

ответ

1

Попробуйте установить перезаписи базы туда, где файл на самом деле:

RewriteEngine On 
RewriteBase /MyDomain/ 
RewriteCond %{HTTP_HOST} ^live\.mydomain\.loc$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ active/$1 [L] 

И делает /active/ относительна: active/

+0

Спасибо, и пока я чувствую, что мы на правильном пути, он не совсем сработал. Это выдержка из моего файла журнала перезаписи: 'internal redirect with/mydomain/active/active/active/active/active/active/active/active/active/active/[INTERNAL REDIRECT]' Это последняя строка log, и, по-видимому, мы где-то пропустили точку цикла. Есть предположения? –

+0

Я понял. Я представил его в качестве ответа. Спасибо за помощь. :) –

0

Я решил эту проблему, используя код ниже:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^live\.mydomain\.loc$ [NC] 
RewriteCond %{REQUEST_URI} !^/mydomain/active/ 
RewriteRule ^(.*)$ active/$1 [L] 

Основная неисправность: RewriteCond %{REQUEST_URI} !^/mydomain/active/. Разница в том, что первая строка, которую я пробовал, RewriteCond %{REQUEST_URI} !^/active, будет соответствовать /access/index.php, но не /mydomain/active/index.php.

Я надеюсь, что это поможет кому-то еще.