2012-12-19 32 views
0

我有以下代碼:的.htaccess重寫規則不與查詢字符串工作作爲目錄

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$ 
RewriteRule ^(.*)$ $1/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^([^\.]+)/$ $1.php 
RewriteRule ^([^\.]+)/([^\.]+)/$ $1.php?id=$2 

我有問題與絕對URI,它解決了。現在我想用最後一行以下:

domain.com/query/ping/2/

domain.com/query/ping.php?id=2

我覺得代碼是好,但我還是回去錯誤404。我應該給一些重寫條件?我搜索了這個代碼,但沒有發現任何有用的東西。

+0

'/ query'應該在URI中嗎?您的「查詢」目錄中是否有htaccess文件?編輯:哦,你是問過關於以前的相對URL問題的人,你應該考慮點擊正確答案旁邊的綠色複選標記,以便你的問題被標記爲「已解決」) –

+0

/查詢必須在那裏,因爲它是一個目錄,.htaccess在根目錄完成,感謝您的建議。你對這個問題有什麼想法嗎? – Gregory

回答

0

根據您放置您的htaccess文件在你前面的問題,你可能想是這樣的:

RewriteCond %{REQUEST_URI} ^/query/([^/]+)/([^/]+)/? 
RewriteCond %{DOCUMENT_ROOT}/query/%1.php -f 
RewriteRule^/query/%1.php?id=%2 [L] 

重要的問題是,你需要的URI的開始檢查/query 。你有什麼,^([^\.]+)/([^\.]+)/$將不匹配/query部分以及它後面的2個路徑名。您的正則表達式只匹配2個路徑名。

RewriteCond %{DOCUMENT_ROOT}/query/%1.php -f與上面的條件類似,它檢查所請求的PHP文件是否真實存在,否則它不會盲目地重寫。

http://domain.com/query/blahblahblahblah/blah

您的服務器將不返回404錯誤說/query/blahblahblahblah.php不存在:如果有人試圖去這個條件保證。

+0

你是一個天才,它的作品,謝謝你! – Gregory