2011-08-17 96 views
5

我試圖建立一個國防部重寫簡單地把這些鏈接:簡單的現代重寫

/index.php?page=home 
/?page=home 

/home 

有人能告訴我如何做到這一點?當我們談論這個問題時,有沒有什麼好的資源可以閱讀mod重寫?迄今爲止我最大的掙扎是我沒有看到任何調試方法;事情或者工作,或者他們不工作。

回答

6

有很多種方法可以做到這一點。這其中將規則應用於任何不存在的文件:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?page=$1 [L] 

編輯:您可能需要在頂部加入RewriteEngine on,這在雲中.htaccess您的Web文檔根目錄。所有這些當然取決於您的虛擬主機是否允許使用htaccess(mod_rewrite)以及規則覆蓋文件是否應該命名爲.htaccess。兩者都很常見,所以它不應該是一個問題。

4

如果我明白了,您希望您的最終用戶輸入example.com/home並將其重寫爲/index.php?home

RewriteEngine On 
# /home or/get redirected... 
RewriteRule ^(home)?$ /index.php?page=home [L,QSA] 

要調試,您可以啓用RewriteLog。但是,正如評論中所建議的那樣,它只能用於調試。最好禁用它或將生產級別設置得非常低。

RewriteLog "/path/to/logs/rewrite.log" 
# Increase the log level (default 0, >4 gets pretty verbose) 
RewriteLogLevel 3 
+0

非常感謝你閱讀起來,這是非常有幫助的。 – 2011-08-17 13:27:49

+1

小方面說明 - `RewriteLogLevel 3`對於嚴重的重寫調試來說太低 - 它只會給你一個概覽,而不會涉及細節。要查看詳細信息,請使用級別9 - 它更加冗長。 – LazyOne 2011-08-17 13:53:01

+1

我會爲這個關於RewriteLog的回答添加一個嚴重的警告,因爲如果你'忘記'它會成爲一個資源管理器,並且它真的不應該在較長時間內處於更高級別,因爲該文件將成爲千兆字節更大的快速... – sg3s 2011-08-17 16:35:53