
Eu tenho um 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>
E um .htaccess
arquivo localizado em /var/www/html/example.com/mysub/.htaccess
. Dentro do .htaccess
arquivo, eu tenho:
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]
O problema:Posso navegar example.com
perfeitamente no meu navegador. No entanto, se eu tentar ir example.com/mysub
, ele me mostrará example.com/index.php
em vez de example.com/mysub/index.php
.
Presumo que isso significa $1
que VirtualHost RewriteRule não contém o mysub
prefixo do diretório? Por que é que? Achei que talvez o RewriteBase (sendo diferente) em ambos os arquivos fosse o problema, mas modificá-lo não alterou a saída.
Acredito que o problema esteja no mod_rewrite do VirtualHost. Em um servidor diferente (Centos 5), o site funciona perfeitamente (embora eu não esteja usando php-fpm). Eu preferiria não modificar o htaccess, pois faz parte do código de terceiros.
PHP5.4; CentOS 7; Apache 2.4
EDITAR:Funciona quando movo o htaccess Rewrites para o arquivo VirtualHost e modifico os caminhos para trabalhar com uma base de /. Isso não é ideal, já que o código de terceiros pode ser atualizado a qualquer momento com um htaccess modificado.
Responder1
Mover o Rewrite para fora da diretiva Directory do VirtualHost resolveu o 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>