2011-06-17 39 views
0

我在的.htaccess文件以下行網站目錄:如何在編輯.htaccess文件時避免URL和目錄匹配問題?

RewriteEngine On 
RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1&%{QUERY_STRING} 

如果它收到例如URL:

http://localhost/samplesite/johnsmith 

將它改寫爲

http://localhost/samplesite/account.php?username=johnsmith 

這很好。

當站點目錄中有一個名爲johnsmith的目錄時,會發生此問題。那麼URL被重寫並顯示爲

http://localhost/samplesite/johnsmith/?username=johnsmith 

並且這是一個問題。我試圖爲每個用戶實現帳戶頁面功能,但是如果用戶想要註冊一個像根目錄中的某個目錄一樣的用戶名,功能將會中斷?我嘗試添加重寫條件來檢查請求的URL是否代表現有的目錄或文件:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

但我不知道如何繼續。

如果有人知道更好的方式爲用戶做賬戶頁面功能,我將不勝感激地給我一個建議。

有人能幫我解決這個案子嗎?謝謝!

回答

0

如果它在正確的位置,您的RewriteCond將工作。您的完整.htaccess應該如下所示:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
# ---------------------------------------------------------------See info below-- 
RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1&%{QUERY_STRING} 

此外,您不需要%{QUERY_STRING}。相反,你應該使用QSA標誌查詢字符串的其餘部分追加...

RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1 [L,QSA] 
+0

是的,最後我在.htaccess文件線條看起來像你的代碼。但問題尚未解決。如果我有相同的目錄和用戶名可用,如何解決它?或者有沒有更好的解決方案來解決這個問題? – forbdn

+0

我的問題的第一個答案沒有解決問題!有誰知道如何防止這個問題?它在目錄和帳戶用戶名的匹配名稱中。功能類似於Facebook中的功能 - 例如,我想與http://www.facebook.com/johnsmith/執行相同的操作。我將非常感謝您的幫助! – forbdn

+1

@forbdn我不認爲你可以用.htaccess解決這個問題。相反,所有請求都必須首先到'index.php'來檢查數據庫以查看是否存在記錄。如果沒有,那麼PHP將不得不檢查目錄是否存在,如果存在則重定向。 –