Я уже почти сошел с ума от проблем с mod_rewrite, пытаясь развернуть приложение CakePHP на общем хостинге с Apache 1.3. Несмотря на то, что я использую файлы .htaccess по умолчанию, мне кажется, что меня беспокоят циклы перезаписи, и множество проб и ошибок ни к чему не привели.
На сервере мое приложение установлено в:
/home/www/myusername/testing
Apache обращается к этому каталогу через символическую ссылку поддомена:
/home/www/hosts/testing.mydomain.com/
Мое приложение CakePHP находится в корневом каталоге внутри «тестирования» со структурой каталога, например:
/home/www/myusername/testing/
webroot/
controllers/
etc...
Базовый .htaccess выглядит так (по умолчанию):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
Webroot .htaccess выглядит так:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
Кажется, все это работает на моем ноутбуке (с Apache 2.2), но дает мне ошибки на сервере, потому что он, кажется, бесконечно переписывает запрос. Если я получаю доступ к любому URI, базовому или нет, я получаю ошибку 403 с этим в журнале ошибок Apache:
Слишком длинное имя файла: доступ к /home/www/hosts/testing.mydomain.com/webroot/home/www/hosts/testing.mydomain.com/webroot/home/www/hosts/testing.mydomain.com/webroot/ home / www / hosts / testing.mydomain.com / webroot / home / www / hosts / testing.mydomain.com / [ПОВТОРИТЬ ДОЛГОЕ ВРЕМЯ ...]
Может ли кто-нибудь увидеть здесь что-нибудь, что привело бы к бесконечному добавлению перезаписи? Я пробовал кучу вещей, например, добавлял RewriteConds, чтобы проверить, что uri еще не содержит webroot, но, похоже, ничего не работает. Я готов поспорить, что это что-то очевидное!
Спасибо.
Должен отказаться от привычки отвечать на свои вопросы, но публикация в SF, кажется, ломает затор. Очевидно, что нужно было добавить к каждому .htaccess соответственно:
RewriteBase /
RewriteBase /webroot
Все еще не уверен особенно Зачем эти директивы необходимы, но я подозреваю, что это как-то связано с каталогом «testing» поддомена, относящимся к корню документа.