2010-01-15 72 views
7

進出口安裝phpancake, 有一個文件夾中有瑪這樣這個重寫規則是什麼意思?

application/ 
install/ 
library/ 
public/ 
sql_schema/ 
install.html 
install.php 

是什麼規則呢?

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /vote/public/index.php [NC,L] 

回答

11

重寫有兩部分。第一個指定如果所請求的文件名是大於0的常規文件(-s),符號鏈接(-l)或目錄(-d),則重寫爲無處,例如。不採取行動。 [NC,L]表示規則不區分大小寫,並且這些條件匹配的最後一條規則。

所有其他請求轉發到/vote/public/index.php

此重寫的目的是可以從服務器獲取實際的現有文件而不會產生干擾。如果沒有第一條規則,每個文件請求(css和js文件,圖像等)都將轉到index.php,這會讓事情變得非常糟糕。

雖然這通常寫在一個聲明中。您可以否定的條件,然後[OR] statemens可以取出來也:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ /vote/public/index.php [NC,L] 

這等同於原來的語句。

+0

@Tatu Ulmanen:你能解釋一下'RewriteCond%{REQUEST_FILENAME} -f'是什麼意思?它只是選項'-s'和'-f'的不同之處?還有什麼是常規文件(不是二進制文件?)? – 2017-05-19 09:43:33

0

那些是其中檢查所請求的文件(或目錄或符號鏈接)存在於磁盤上,主要標準重寫在這種情況下,文件/目錄/等。應該使用。

所有其他比賽應該去/votes/public/index.php

+0

來自@Tatu Ulmanen的答案你能解釋一下'RewriteCond%{REQUEST_FILENAME} -f'是什麼意思?它只是選項'-s'和'-f'的不同之處?還有什麼是常規文件(不是二進制文件?)? – 2017-05-19 09:47:43

0

的第一條規則將通過可以被映射到一個普通文件的大小大於零(-s)更大的所有請求,一個符號鏈接(-l)或目錄(-d)。其他請求由第二條規則提取並重寫爲/vote/public/index.php