2013-02-28 54 views
0

我正在設置一個網站,該網站設置爲將頁面加載爲http://domain.tld?p=pagename,並且我希望可以通過http://domain.tld/pagename訪問這些頁面(僅僅是因爲它更容易引導用戶)。將查詢字符串重寫爲斜槓

我知道這可以通過mod_rewrite.htaccess完成,但是當談到服務器的東西時,我有點兒不知所措。這是可取的,如果是這樣,它是如何完成的?

(呵呵,和網頁已經沒有查詢字符串,它只是http://domain.tld - 我不希望這打破。)

回答

1

去過了一會兒,因爲我與Apache CONFIGS玩,但你要像這樣的:

RewriteEngine on 
RewriteRule ^/([^/])/? ?p=$1 

第一部分是一個正則表達式,第二部分是替代就像你在Perl的s/foo/bar/結構發現(當然也有從Perl的一些區別,因爲正則表達式implementaions總是略有不同) 。

這將不匹配http://domain.tldhttp://domain.tld/,因爲([^/])不滿意,而不是可選的。該/?在表達式的末尾是處理http://domain.tld/pagenamehttp://domain.tld/pagename/同樣(如果你想這樣做)

需要注意的是,如果有查詢字符串傳遞其他參數我上面的代碼不一定會工作,但你沒有要求...

你應該知道,網址重寫可以變得非常複雜,因爲頁面開始有額外的查詢字符串參數,或者你想/area/pagename等。這增加了複雜性最終會導致你花費大量時間閱讀本頁:

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

也許這是值得的......只有你知道這個問題的答案questiong :)

+0

有一個或兩個頁面與該查詢字符串添加其他參數的形式,所以我想最好我會支持那些太。我'獲得'形式甚至不是必要的,我可以'貼'他們,但我希望儘可能得到它們。我確實需要了解'mod_rewrite'是如何工作的,但目前有點令人生畏。 – georgewatson 2013-03-01 00:27:11

+0

等一下,'[QSA]'旗會做嗎? – georgewatson 2013-03-01 01:09:09

+0

實際上,表單通常是錯誤的。 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