Php

PHP-FPM 不適用於 htaccess

  • August 24, 2015

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

引用自:https://serverfault.com/questions/716040