
私は以下を持っています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) では、Web サイトは完全に動作します (ただし、php-fpm を使用していません)。htaccess はサードパーティ コードの一部であるため、変更したくありません。
PHP 5.4、CentOS 7、Apache 2.4
編集:htaccess の書き換えを 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>