2011-05-21 154 views
0

網址:http://localhost/url/of/the/keyword/whatever/htaccess的怪異尾隨斜線問題

RewriteRule ^url/of/the/keyword/([a-z]+)/?$ ?keyword=$1 [L] 
// php 
echo $_GET['keyword'];  
// outputs **whatever** (OK) 
RewriteRule ^url/of/the/keyword/(.*)/?$ ?keyword=$1 [L] 
// php 
echo $_GET['keyword']; 
// outputs **whatever/** (with a trailing slash, which is not expected) 

任何人都可以解釋爲什麼有第二個條件結尾的斜線?


另外,我怎樣才能讓百分比符號在URL重寫?

http://localhost/url/of/the/keyword/%40%23%24/

RewriteRule ^url/of/the/keyword/([0-9a-zA-Z-.%])/?$ ?keyword=$1 [L] 

上述規則不起作用。任何人都可以糾正這個,所以它允許一個-Z,0-9,點,連字符和百分號?

謝謝!

回答

2

對於第二個RewriteRule,您正在獲得/,因爲.*是貪婪的。也就是說它貪婪地捕獲尾隨斜線,因爲您已將其標記爲可選/?。最好是針對您的模式(如第一個RewriteRule)以避免這種情況。

你匹配的模式可以接受任何東西。只要記住它必須是一個有效的URL。問題是你忘記了量詞。所以你只能匹配分組中的一個字符。

添加+

RewriteRule ^url/of/the/keyword/([0-9a-zA-Z\-.%]+)/?$ ?keyword=$1 [L] 
+0

感謝傑森,我得到的第一個。第二,這是一個錯字,我忘了加號。但即使加號,它也不起作用。結果在404. – 2011-05-21 21:44:02

+0

我認爲你的斜線需要轉義。查看更新。 – 2011-05-21 23:41:54