2012-05-05 92 views
2

我給自己定的規則,Apache網址重寫問題

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ user.php?userid=$1 

它重定向到http://localhost/usernamehttp://localhost/user.php?id=username工作正常, 但對其他現有的文件夾頁仍然重定向到user.php的頁面;不是那個現有的文件夾,例如http://localhost/folder它仍然重定向到http://localhost/folder/?userid=folder, 它如何使它爲現有的目錄工作,例如,當我鍵入http://localhost/folder然後頁面應顯示/文件夾/目錄?

+4

它應該工作的罰款。 – VisioN

+0

嗯。但不工作它stil去'http:// localhost /文件夾/?用戶ID =文件夾'而不是實際'http:// localhost /文件夾/'(實際的文件夾) –

+0

添加'選項-MultiViews'選項。 – julesj

回答

1

這個替換您的.htaccess代碼:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule^- [L] 

RewriteRule ^(messages)/?$ index.php?page=$1 [L,NC,QSA] 

RewriteRule ^(A-Z0-9_-]+)/?$ user.php?userid=$1 [L,NC,QSA] 

如果仍不能在httpd.conf和後日志從那裏工作,請從發佈的access.log匹配的長項,並啓用RewriteLog您題。

+0

我編輯了我的問題;實際上我寫了'RewriteRule^messages /?$ index.php?page = messages [L,NC] ([a-zA-Z0-9 _-] +)/?$ user.php?userid = $ 1 [L,NC,QSA]'刪除'RewriteRule^messages /?$ index.php?page = messages [L, NC]'它工作正常,這條線創造了問題,所以如何解決這個問題,最後的.htaccess文件就像我編輯的問題一樣。 –

+1

請檢查我編輯的答案根據您的評論和編輯的問題 – anubhava

+0

確定很好。你的答案,並使我的懷疑清楚。有愉快的一天.... :) –

1

問題是你的第二個RewriteRule沒有RewriteConds。你的兩個RewriteConds只適用於第一條規則,然後停止。因此第二條規則無條件地適用於每個請求URI。 所以你的.htaccess的這部分應該是這樣的,而不是:

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^messages/?$ index.php?page=messages [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ user.php?userid=$1 [L,NC,QSA] 
+0

RewriteConds只適用於一個規則? –

+0

是的,只有一條規則。 – Ansari