у меня есть VirtualHost
:
<VirtualHost *:80>
DocumentRoot "/var/www/html/example.com"
ServerName example.com
ServerAlias *.example.com
<Directory "/var/www/html/example.com">
Require all granted
Options -Indexes +FollowSymLinks -ExecCGI
AllowOverride All
DirectoryIndex index.php
<IfModule mod_proxy_fcgi.c>
RewriteEngine On
RewriteBase /
RewriteOptions InheritBefore
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^\.]+\.php)$ fcgi://127.0.0.1:9000/var/www/html/example.com/$1 [L,P]
</IfModule>
</Directory>
</VirtualHost>
И .htaccess
файл, расположенный в /var/www/html/example.com/mysub/.htaccess
. Внутри .htaccess
файл, у меня есть:
Options -MultiViews
RewriteEngine On
RewriteBase /mysub
Options +FollowSymLinks
RewriteCond $1 !^(index\.php|assets|css|js|favicon\.ico|robots\.txt)
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Проблема: Я могу перейти к example.com
в моем браузере все в порядке. Однако, если я попытаюсь перейти на example.com/mysub
, это показывает мне example.com/index.php
вместо того example.com/mysub/index.php
.
Я полагаю это означает $1
в VirtualHost RewriteRule не содержит mysub
префикс каталога? Это почему? Я подумал, что, возможно, проблема в RewriteBase (которая отличается) в обоих файлах, но ее изменение не повлияло на результат.
Я считаю, что проблема в модуле VirtualHost mod_rewrite. На другом сервере (Centos 5) сайт работает отлично (хотя я не использую php-fpm). Я бы предпочел не изменять htaccess, поскольку он является частью стороннего кода.
PHP 5.4; CentOS 7; Apache 2.4
РЕДАКТИРОВАТЬ: Это работает, когда я перемещаю перезаписи htaccess в файл VirtualHost и изменяю пути для работы с базой /. Это не идеально, поскольку сторонний код можно обновить в любое время с помощью модифицированного htaccess.
Перенос Rewrite за пределы директивы Directory VirtualHost решил проблему.
<VirtualHost *:80>
DocumentRoot "/var/www/html/example.com"
ServerName example.com
ServerAlias *.example.com
<Directory "/var/www/html/example.com">
Require all granted
Options -Indexes -MultiViews +FollowSymLinks
AllowOverride All
</Directory>
RewriteEngine On
RewriteOptions InheritBefore
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond $1 ^(.*\.php(/.*)?)$
RewriteRule ^(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1 [L,P]
</VirtualHost>