Переписать правила не работает Apache 1.3 - PullRequest
1 голос
/ 01 мая 2010

Я использую пару директив перезаписи, которые всегда работали раньше на apache2, но теперь пробую новый общий хостинг и правила перезаписи, похоже, не применяются.

Я сократил файлы .htaccess до следующих основных правил:

RewriteEngine On
Rewritebase /demo/

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

Как видите, я хочу переписывать каждый запрос в мой файл index.php в демо-папке root.

Таким образом, все как http://www.example.com/demo/albums/show/1 должно быть обработано http://www.example.com/demo/index.php для стандартной установки MVC. (Я использую CodeIgniter кстати)

Приведенные выше директивы приводят к ошибке 500, поэтому я подумал, что, возможно, из-за некоторых возможных синтаксических различий между 1.3 и 2.x.

После некоторого редактирования следов и ошибок я обнаружил, что само правило перезаписи ошибочно, но я действительно не понимаю, почему.

  • Есть идеи, почему мое правило перезаписи не работает? это было раньше на многих разных серверах.
  • Предложения как это исправить?

Примечание: mod_rewrite работает, я написал небольшой тест, чтобы быть уверенным.

Ответы [ 3 ]

1 голос
/ 01 мая 2010

Вы установили:

Options +FollowSymLinks

... до переписывания правил? Если FollowSymLinks отключено, mod_rewrite не будет работать.

1 голос
/ 02 мая 2010

Возможно, вы сталкиваетесь с бесконечной рекурсией, поскольку index.php/… также соответствует ^(.*)$. Поэтому постарайтесь исключить вашу цель:

RewriteCond $1 !^index\.php/
RewriteRule ^(.*)$ index.php/$1 [L]
1 голос
/ 01 мая 2010

На вашем месте, я бы сначала посмотрел в журнале ошибок Apache, а затем попытался бы устранить одну движущуюся часть, выполнив

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

Если бы это сработало, я бы попробовал заново ввести RewriteBase.

...