去過了一會兒,因爲我與Apache CONFIGS玩,但你要像這樣的:
RewriteEngine on
RewriteRule ^/([^/])/? ?p=$1
第一部分是一個正則表達式,第二部分是替代就像你在Perl的s/foo/bar/
結構發現(當然也有從Perl的一些區別,因爲正則表達式implementaions總是略有不同) 。
這將不匹配http://domain.tld
或http://domain.tld/
,因爲([^/])
不滿意,而不是可選的。該/?
在表達式的末尾是處理http://domain.tld/pagename
和http://domain.tld/pagename/
同樣(如果你想這樣做)
需要注意的是,如果有查詢字符串傳遞其他參數我上面的代碼不一定會工作,但你沒有要求...
你應該知道,網址重寫可以變得非常複雜,因爲頁面開始有額外的查詢字符串參數,或者你想/area/pagename
等。這增加了複雜性最終會導致你花費大量時間閱讀本頁:
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
也許這是值得的......只有你知道這個問題的答案questiong :)
來源
2013-03-01 00:11:33
Gus
有一個或兩個頁面與該查詢字符串添加其他參數的形式,所以我想最好我會支持那些太。我'獲得'形式甚至不是必要的,我可以'貼'他們,但我希望儘可能得到它們。我確實需要了解'mod_rewrite'是如何工作的,但目前有點令人生畏。 – georgewatson 2013-03-01 00:27:11
等一下,'[QSA]'旗會做嗎? – georgewatson 2013-03-01 01:09:09
實際上,表單通常是錯誤的。 GET請求應該是「安全的」,因爲它們不會改變服務器上的狀態。 HTTP規範規定PUT適用於冪等變異請求(除了int REST體系結構以外,不是很常見),POST則用於改變狀態並可能對同一提交數據產生不同影響的事情(例如重複收取信用卡導致較低和低銀行餘額:))。如果您希望保留參數,可能會涉及'[QSA]',但請注意'http://example.com/foo?a = b' ==>'http://example.com/?p= foo?a = b' – Gus 2013-03-01 05:38:44