2015-01-26 74 views
1

我有一個很小的問題。我創建了一個.htaccess文件,假設將example.com/user/foo/bar的條件重寫爲example.com/user.php?username=$1&tab=$2,因此用戶名稱將是foo,並且查看選項卡必須是條形。爲什麼example.com/foo/有效,但example.com/foo沒有?

但是,如果沒有提供完全像example.com/user/foo/那樣的條形圖數據,它會轉到具有默認選項卡(默認選項卡在script.php文件中生成)的用戶。

但我看到一些網站,他們可以做到這一點,就像example.com/user/foo,沒有/在線。當我做example.com/foo去用戶,它說沒有找到頁面。我的相應.htaccess行是:

RewriteEngine On 
RewriteRule ^user/(.*)/(.*)$ user.php?username=$1&tab=$2 [L] 

請幫我解決這個問題。

+0

基本上你的規則要求URL沒有價值有兩個非''''''''''''''''''''''''''''''''''/'' – 2015-01-26 21:31:38

回答

5

你的匹配規則是^user/(.*)/(.*)$,這意味着第二個斜槓必須在那裏(因爲它是指定的),但文字之後是可選的(因爲*匹配零個或多個字符)。

真的,我會添加兩個重寫規則來做不同的事情(並防止使用複雜的正則表達式)

RewriteRule ^user/(.*)/(.*)$ user.php?username=$1&tab=$2 [L] 
RewriteRule ^user/(.*) user.php?username=$1 [L] 
2

或者,你可以讓第二個參數可選:

RewriteRule ^user/([^/]+)/?(?:(.*)|)$ user.php?username=$1&tab=$2 [L] 

只要你不介意爲$_GET['tab']