Php
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
。我假設這意味著
$1
在 VirtualHost RewriteRule 中不包含mysub
目錄前綴?這是為什麼?我認為這兩個文件中的 RewriteBase(不同)可能是問題所在,但修改它並沒有改變輸出。我相信問題出在 VirtualHost mod_rewrite 中。在另一台伺服器(Centos 5)上,該網站執行良好(儘管我沒有使用 php-fpm)。我不想修改 htaccess,因為它是 3rd 方程式碼的一部分。
PHP5.4;美分作業系統 7;阿帕奇 2.4
**編輯:**當我將 htaccess 重寫移動到 VirtualHost 文件並修改路徑以使用 /. 這並不理想,因為可以隨時使用修改後的 htaccess 更新第 3 方程式碼。
將 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>