PHP-FPM 无法与 htaccess 配合使用

PHP-FPM 无法与 htaccess 配合使用

我有一个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

我猜这意味着$1VirtualHost 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 移出 VirtualHost 的 Directory 指令之外解决了该问题。

<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>

相关内容