
У меня есть 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 Rewrites в файл VirtualHost и изменяю пути для работы с базой /. Это не идеально, поскольку сторонний код может быть обновлен в любое время с помощью измененного htaccess.
решение1
Перемещение 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>