Я пытаюсь настроить Apache с HHVM. В рамках этого мне нужно настроить правила перезаписи. Я запустил HHVM как демон в режиме FastCGI. Я включил модули Apache mod_proxy
, mod_proxy_fcgi
и mod_rewrite
.
Во-первых, без mod_rewrite
у меня есть этот виртуальный хост:
<VirtualHost *:80>
DocumentRoot /app
ProxyPass / fcgi://127.0.0.1:9000/app/
</VirtualHost>
У меня есть файл /app/foo.php
, который выглядит так:
<?php echo "HELLO\n";
И поэтому я могу получить к нему доступ, используя:
$ curl http://localhost/foo.php
HELLO
Теперь, после настройки моих правил перезаписи:
<VirtualHost *:80>
DocumentRoot /app
ProxyPass / fcgi://127.0.0.1:9000/app/
RewriteEngine on
RewriteRule ^(.*)$ /foo.php
</VirtualHost>
Я ожидаю, что все запросы теперь приводят к выполнению файла foo.php
с выводом HELLO
.
Однако происходит то, что мне дается HTTP 403 не только для запросов к /foo.php
, но и для любого запроса:
$ curl http://localhost/foo.php
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /foo.php
on this server.</p>
<hr>
<address>Apache/2.4.6 (Ubuntu) Server at localhost Port 80</address>
</body></html>
$ curl http://localhost/blah
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /blah
on this server.</p>
<hr>
<address>Apache/2.4.6 (Ubuntu) Server at localhost Port 80</address>
</body></html>
Журнал ошибок Apache показывает мне:
$ tail -2 /var/log/apache2/error.log
[Fri Apr 11 21:30:20.645439 2014] [authz_core:error] [pid 5090:tid 140114499983104] [client 127.0.0.1:39056] AH01630: client denied by server configuration: /app/foo.php
[Fri Apr 11 21:30:23.281610 2014] [authz_core:error] [pid 5090:tid 140114616588032] [client 127.0.0.1:39057] AH01630: client denied by server configuration: /app/foo.php
После этого я установил права доступа к каталогу:
<VirtualHost *:80>
DocumentRoot /app
ProxyPass / fcgi://127.0.0.1:9000/app/
<Directory /app>
Require all granted
</Directory>
RewriteEngine on
RewriteRule ^(.*)$ /foo.php
</VirtualHost>
И теперь Apache обслуживает простой файл /app/foo.php
:
$ curl http://localhost/blah
<?php
echo "HELLO\n";
То есть теперь он, похоже, соблюдает правила перезаписи, но теперь игнорирует правило ProxyPass
.
Как мне заставить их работать вместе?