Назад | Перейти на главную страницу

Бесконечный цикл с VirtualDocumentRoot, .htaccess и mod_rewrite

Я хочу создать надежную многопользовательскую среду разработки с apache2.

Я поместил следующий файл в etc/apache2/sites-available/mydomain.com

<virtualhost *:80>
    ServerName  mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot /var/www/mydomain.com/prod
</virtualhost>

<virtualhost *:80>
    VirtualDocumentRoot /var/www/mydomain.com/%1
    ServerName dev.mydomain.com
    ServerAlias *.dev.mydomain.com
</virtualhost>

И следующие .htaccess файл копируется в каждый /var/www/mydomain.com/* каталог:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L,NS]

Наконец, он отлично работает для таких запросов, как http://mydomain.com/, но не для http://mydomain.com/foo.

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.
[debug] core.c(3112): r->uri = /var/www/mydomain.com/foo/index.php
…
[debug] core.c(3118): redirected from r->uri = /var/www/mydomain.com/foo/index.php
[debug] core.c(3118): redirected from r->uri = /foo

Итак, как я могу это исправить и что не так?

Распространенное заблуждение состоит в том, что перезаписываемые записи принадлежат файлам .htaccess. Они этого не делают. Собственно ставить rewriterules - плохая идея.

У вас есть доступ к конфигурации вашего сервера. Вы должны поместить туда свои правила (если вы решите использовать любые ...)

Однако есть лучшее решение для «перенаправления всего, что не найдено, в index.php». И это для использования резервного ресурса:

http://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource

<virtualhost *:80>
    VirtualDocumentRoot /var/www/mydomain.com/%1
    ServerName dev.mydomain.com
    ServerAlias *.dev.mydomain.com
    FallBackResource /index.php
</virtualhost>