2012-12-07 29 views
2

我需要一個重寫規則來加載一個網站,有時需要一個和someties兩個變量。一個重寫規則針對兩種情況

我需要通過調用來存取權限我的網站:

blubb.com/user123 
blubb.com/user123/ 

應該重寫/profile.php?username=user123

blubb.com/user123/photos 
blubb.com/user123/photos/ 

應該重寫/profile.php?username=user123&site=photos

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)/([^/]*)$ /profile.php?username=$1&site=$2 [NC] 

與規則上面,我得到它的工作叫blubb.com/user123/blubb.com/user123/photos而不是其他兩個。

回答

1

頭真的應該301重定向以斜線,以相同的URL網址沒有斜槓(在一個單獨的重寫)。如果他們兩人都提供相同的內容,Google會將其視爲內容稀釋並對其進行處罰。

這應該做到這一點:

# Redirect trailing slash to no trailing slash for Google: 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,QSA,R=301] 

# Route appropriately 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/?(.*)$ /profile.php?username=$1&site=$2 [NC,QSA] 
+0

的感謝!它幾乎完美地工作。唯一的問題是,blubb.com/user123/(帶斜線)給我一個錯誤404。其他3例完美運行 – user1886411

+0

嗯......它真的不應該。我會研究它。 –

+0

順便說一句,你真的應該301重定向你的網址後面的斜槓到相同的URL沒有斜槓(在一個單獨的重寫)。如果他們兩人都提供相同的內容,Google會將其視爲內容稀釋並對其進行處罰。 –

0
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9A-Za-z]+)(/([0-9A-Za-z]*)/?$ /profile.php?username=$1&site=$3 [NC]