疑難雜癥
阿新 • • 發佈:2017-09-04
req director module var nbsp cgi 問題解決 write mar
1、apache虛擬目錄部署多個站點問題
在使用apache的虛擬目錄部署多個站點時遇到一個問題:生成url的時候會將文件目錄一起解析出來,這就導致路由錯誤(tp框架)
問題:解析的時候將文件目錄解析出來了,tp框架就把文件目錄當做了路由去解析
apache虛擬目錄的設置方法:
//主目錄 DocumentRoot "F:\project\image_annotation\public" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> //虛擬目錄 Alias /wheel "F:\project\wheel-tp5+layui\public" <Directory "F:\project\wheel-tp5+layui\public"> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory>
問題解決辦法:修改url重寫規則
問題的根本在於進行了index.php隱藏的重寫規則,首先得理解phpstudy默認的重寫規則的含義,
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
1、排除一些條件,必須兩個條件都滿足後才重定向到index.php
//如果你訪問的文件不等於目錄
RewriteCond %{REQUEST_FILENAME} !-d
//如果你訪問不是文件,比如你可能訪問的JPEG等圖片文件
RewriteCond %{REQUEST_FILENAME} !-f
2、^(.*)$
匹配所有的路徑映射到入口文件 index.php/$1
3、標簽 [QSA,PT,L]
QSA:表示保留參數如get傳值?xxx==xx...; PT:再把這個URL交給Apache處理;L:作為最後一條;
PT和L可加可不加。
意思就是說匹配所有的路徑映射到入口文件index,php去處理,所以當存在虛擬目錄時,入口文件應該是 /虛擬目錄/index
所以,解決辦法:
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f # RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] RewriteRule ^(.*)$ /wheel/index.php [L,E=PATH_INFO:$1] </IfModule>
疑難雜癥