2010-01-19 3 views
0

Итак, я настраиваю SVN на своем домашнем сервере (Ubuntu 9.1) и хочу, чтобы сразу же просматривали любые изменения, внесенные в мое приложение CodeIgniter.Бесконечная петля на комбинации RewriteRules

Итак, моя рабочая копия живет в/home/myname/environment/development/appname.

Мой ВХост доступен в dev.appname.myname.ca и конфигурации выглядит следующим образом:

DocumentRoot /home/myname/environments/development/ 
ServerName dev.myname.ca 
ServerAlias dev.*.myname.ca 

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.* [NC] 
RewriteCond %{HTTP_HOST} ^dev.([^\.]+)\.myname\.ca 
RewriteCond /home/myname/environments/development/%1/trunk/ -d 
RewriteRule ^(.*) /%1/trunk/public/$1 

Таким образом, собирается dev.appname.myname.ca бы указать/дома/MyName/среды/развитие/имя_приложение/багажник/общественность.

Теперь, это является приложение CodeIgniter, мне нужно перенаправить все запросы от общественности/к общественности/index.php, поэтому файл .htaccess в общественных местах/выглядит следующим образом:

RewriteEngine On 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ index.php/$1 [L] 

У меня есть это часть в файле .htaccess, потому что на живом производственном сайте у меня не будет доступа к конфигурации сервера, поэтому мне нужно будет переопределить его.

Проблема в том, что я получаю цикл перенаправления и, в конечном счете, ошибку 500.

От /var/log/apache2/error.log:

redirected from r->uri = /appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/appname/trunk/public/index.php/ 

Как можно перенаправить запрос на надлежащий общественный/каталог (в данном случае/дома/MyName/сред/разработка/APPNAME/trunk/publc) и THEN направлять все запросы от public/public/index.php?

Я знаю, что это длинный вопрос - спасибо за вашу помощь. :)

ответ

-1

Попробуйте использовать что-то менее сумасшедшее, вам не нужно перенаправлять из public/to public/index.php, поскольку Apache сделает это за вас.

CodeIgniter Wiki показывает, как create the ultimate CodeIgniter .htaccess.

0

AS Фил упомянул вы должны использовать правила перезаписи здесь http://codeigniter.com/wiki/mod_rewrite/

Для некоторой отладки вы можете добавить следующие строки в httpd.conf или виртуальный хост конф.

<IfModule mod_rewrite.c> 
RewriteLog "/var/log/apache2/rewrite.log" 
RewriteLogLevel 3 
</IfModule> 

С

tail -f /var/log/apache2/rewrite.log 

вы можете проверить правила перезаписи и некоторые ошибки. Вы также можете изменить уровень до 9. Позаботьтесь об этом. Это дает много информации. Иногда это полезно.

1

Ваш RewriteRule находится в обратном направлении от того, что вы действительно хотите.

RewriteRule ^(.*)$ index.php/$1 [L] 

Это превратит "Дира/DIRB/DIRC /" в "index.php/Dira/DIRB/DIRC". В следующем HTTP-запросе это будет удовлетворять условию, и правило будет применяться снова. И снова, и снова ...

Try:

RewriteRule ^(.*)\/?$ $1/index.php [L] 
+0

Если вы сделаете это CodeIgniter не сработает.Флаг [L] означает, что он перенаправляется на index.php, а затем больше не перенаправляет. –