
Tengo un 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>
Y un .htaccess
archivo ubicado en /var/www/html/example.com/mysub/.htaccess
. Dentro del .htaccess
archivo tengo:
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]
La cuestión:Puedo navegar example.com
perfectamente en mi navegador. Sin embargo, si intento ir a example.com/mysub
, me muestra example.com/index.php
en lugar de example.com/mysub/index.php
.
Supongo que esto significa $1
que VirtualHost RewriteRule no contiene el mysub
prefijo de directorio. ¿Porqué es eso? Pensé que tal vez el problema era RewriteBase (que era diferente) en ambos archivos, pero modificarlo no cambió el resultado.
Creo que el problema está en VirtualHost mod_rewrite. En un servidor diferente (Centos 5), el sitio web funciona perfectamente (aunque no uso php-fpm). Preferiría no modificar htaccess ya que es parte del código de terceros.
PHP 5.4; CentOS 7; Apache 2.4
EDITAR:Funciona cuando muevo las reescrituras de htaccess al archivo VirtualHost y modifico las rutas para que funcionen con una base de /. Sin embargo, esto no es ideal ya que el código de terceros se puede actualizar en cualquier momento con un htaccess modificado.
Respuesta1
Mover la Reescritura fuera de la directiva Directorio de VirtualHost resolvió el problema.
<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>