Файл не найден с VirtualHost и mod_rewrite
Я создаю RESTful API, основанный на Тонике. На моей машине разработчика и нашем сценическом сервере мы используем виртуальные хосты.
Тоник использует файл.htaccess для перевода входящих звонков в свой файл dispatcher.php. Это прекрасно работает на серверах без VirtualHosts.
Однако, если я включаю VirtualHosts, я получаю файл, который не найден, даже думая, что путь и имя файла верны.
Вот настройка VirtualHost на моей машине разработчика.
<VirtualHost *:80>
ServerAdmin admin@xxxxxxxxxxxx
ServerAlias *.dev.xxxxx
VirtualDocumentRoot /home/xxxxxxxx/workspace/%1
<Directory /home/xxxxxxxx/workspace/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
И.htacces Тоника, расположенный в папке rest в корне проекта:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !dispatch\.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* dispatch.php [L,QSA]
</IfModule>
Звонок на http://project.dev.xxxxx/rest/ дает:
Not Found
The requested URL /home/xxxxxxxx/workspace/project/rest/dispatch.php was
not found on this server.
Apache/2.2.22 (Ubuntu) Server at xxxxxxx Port 80
1 ответ
Похоже, что вы злоупотребляете VirtualDocumentRoot
, Попробуйте изменить это на:
DocumentRoot /home/xxxxxxxx/workspace/project/rest
Кроме того, вот хорошее объяснение VirtualDynamicRoot
: Динамически настраиваемый массовый виртуальный хостинг
Надеюсь, это поможет.