1. 程式人生 > >疑難雜癥

疑難雜癥

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>

  

  

疑難雜癥