2013-06-30 5 views
0

Я переношу некоторый код из рабочего веб-приложения, но не могу заставить его работать на новом сервере. Кажется, что все настроено правильно, но я получаю внутренние ошибки переадресации в Apache2. Вот мои перезаписи и объясненияmod_rewrite: проверьте, не является ли определенный домен

Это WORKS - любые поддомены, которые не являются cdn. или управлять. следует перенаправить на u.php

RewriteCond %{HTTP_HOST} ^(^.*)\.mediasprk\.com$ [NC] 
RewriteCond ^(.*)$ !^(cdn|manage)$ 
RewriteCond %{REQUEST_URI} !\.(png|gif|jpg)$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ u.php?uri=$1&hostName=%{HTTP_HOST} 

Это больше не работает. Цель здесь - управлять указателем CName. Так что если это не домен моего приложения (mediasprk.com), тогда обработайте его, отправив его на u.php.

RewriteCond %{HTTP_HOST} !^mediasprk\.com$ [NC] 
RewriteCond %{REQUEST_URI) !\.(png|gif|jpg)$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ u.php?uri=$1&hostName=%{HTTP_HOST} 

Может ли кто-нибудь увидеть проблему здесь во втором блоке, которая вызовет ошибки ограничения перенаправления? Может быть, что-то не так в переписывании? Благодарю.

+0

Дополнение: оба они находятся в одном и том же htaccess - я не представляю ни/или - мне нужно как работать, так и консолидироваться. Я сосать переписывание! Благодаря! – ingage

ответ

0

Здесь я вижу две проблемы. Во-первых, я не верю, что ваша первая директива RewriteCond является действительным и значимым:

RewriteCond ^(.*)$ !^(cdn|manage)$ 

См section about RewriteCond in the Apache manual.

Во-вторых, вы получаете бесконечные перезаписи, потому что ваш второй блок правил использует значение HTTP_HOST (имя домена) в качестве условия теста, но не может изменить значение HTTP_HOST. Другими словами, если тест RewriteCond совпадает (а доменное имя не является «mediasprk.com»), RewriteRule просто сообщает Apache об изменении пути к чему-то другому в том же домене. И то, что большинство людей не понимает, - это то, что переписанные пути * должны проходить правила mod_rewrite с вершины *. Таким образом, переписанный путь будет оставаться в любой области, которую использовал первоначальный запрос, что означает, что RewriteCond будет снова соответствовать, и переписывание произойдет снова. И снова. И так далее, пока вы не получите ошибку сервера, сообщив вам, что предел перезаписи достигнут.

Вы можете выйти из этого цикла, изменив RewriteRule на:

RewriteRule ^(.*)$ http://www.mediasprk.com/u.php?uri=$1&hostName=%{HTTP_HOST} 

, но это вызовет браузер перенаправление, а не молчаливое переписывания.

Другой способ вырваться из бесконечного цикла, чтобы проверить, что запрос уже не прося u.php файла, так что вы можете добавить дополнительные RewriteCond до этого RewriteRule:

RewriteCond %{REQUEST_URI} !^/u\.php$ 

Либо путь, вы должны сделать возможным вырваться из бесконечного цикла, создаваемого вашими текущими директивами.