2011-08-03 39 views
0

我試圖得到類似$ _ SERVER [「PATH_INFO」],但奇怪的服務器問題阻止我使用它的東西...htaccess的目錄,文件和變量

在我的應用程序,鏈接可以看起來像

www.domain.com/folder/file/variable 
www.domain.com/folder/file 
www.domain.com/file/variable or 
www.domain.com/file/ 

使用.htaccess,我試圖去正確的頁面,而不是重定向到index.php或類似的。

到目前爲止,我有這個,這是不工作:)

RewriteRule ^(.+)$ /$1.php # page only 
RewriteRule ^(.+)/(.+)$ /$1.php?x=$2 # page + variable 
RewriteRule ^(.+)/(.+)$ /$1/$2.php # folder/page 
RewriteRule ^(.+)/(.+)/(.+)$ /$1/$2.php?x=$3 # folder/page + variable 

我相信,我需要用的RewriteCond%{} REQUEST_FILENAME -f來檢查,如果該請求是一個文件名或目錄。 ..但我無法使它工作...

變量可以包含所有怪異字符 - 這就是爲什麼我用點匹配......也許我應該盡力配合,只有AZ文件/文件夾名稱(自我不認爲他們將永遠不會包含任何東西,但az,_或 - )。

任何幫助是極大的讚賞,因爲它一直是近兩天的痛苦現在:)

+1

1)由於模式的使用帶有較長的模式首先作爲啓動'^(。+)$'將匹配'/文件/'和'/文件/ variable'以及'/文件夾/文件/ variable'; 2)使用'[^ ​​/] +'的(),而不是'^(+)$' - 這將幫助您將#1 – LazyOne

回答

0

感謝@ LazyOne的提示,我能解決這個問題。

htaccess文件現在看起來是這樣的:

RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)$ /$1/$2.php?x=$3 
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/$ /$1/$2.php 
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)$ /$1.php?x=$2 
RewriteRule ^([-a-zA-Z0-9_]+)/$ /$1.php 

所有文件夾或文件的路徑必須以「/」,而變量不能結束。這在我的框架中不是問題 - 但可能對其他人沒有用處。

1

反向重寫規則最具體到第一。

RewriteEngine On 
RewriteRule ^(.+)/(.+)/(.+)$ /$1/$2.php?x=$3 [L] 

# RewriteRule to check that the file is exists here 
RewriteCond %{REQUEST_URI} ^(.+)/(.+)$ 
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}.php -f 
RewriteRule ^(.+)/(.+)$ /$1/$2.php [L] 

# If file is not exists, then check by put to the variable 
RewriteRule ^(.+)/(.+)$ /$1.php?x=$2 [L] 
RewriteRule ^(.+)$ /$1.php [L] 
+0

是的,是的,對不起,沒有進入細節,它都在那裏,RewriteEngine敘述在等等......我的htaccess配置基本的工作原理,但僅限於當時的一個案例。如果我只對一行進行評論,然後點擊相應的URL,它就可以工作。 – dvdbrk

0

大多數人/框架將沒有指定擴展名的所有東西都傳遞給一個php前端控制器,然後解決該做什麼。我想一個原因,大多數人走這條路,是因爲僅僅是多麼複雜的mod_rewrite是!