請參閱UPDATE,如下。
你的問題可能是?
是正則表達式元字符(如.
和*
):
?
表示零或先前表達式中的一個。 「pin?e」將匹配「鬆」和「派」。 source
嘗試逃脫這樣的:
RewriteRule ^index\.php\?(.*)$ http://www.domain.com/$1 [R=301,L]
您現有的規則是尋找index.ph
,可能還跟着p
,然後收集所有剩餘的字符轉換爲$1
(其中將包括?
)。
UPDATE
經審查,我在這裏做了一些非常基本的錯誤。請允許我糾正它們:
mod_rewrite
只查看URL的路徑部分...這意味着所有內容都是從查詢字符串中分離出來的,但不包括?
。所以我上面列出的規則將永遠不會工作,因爲?
和以下文本不被RewriteRule
看到。
您可以對陣查詢字符串與RewriteCond
指令,這給了我們:
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^/index.php http://www.domain.com/%1 [R=301,L]
這轉儲的查詢字符串中的任何物體插入%1
,然後將其追加到http://www.domain.com/
...幾乎工作,但你會發現,這樣的懇求:
http://domain.com/index.php?some/path
變爲:
http://www.domain.com/some/path?some/path
我們需要包括?
我們重寫路徑告訴mod_rewrite
抹去的查詢字符串,這給了我們:
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^/index.php http://www.domain.com/%1? [R=301,L]
我的系統上使用此配置,請求:
http://localhost/index.php?some/path
返回:
HTTP/1.1 301 Moved Permanently
Date: Sat, 31 Mar 2012 00:39:34 GMT
Server: Apache/2.4.1 (Unix) OpenSSL/1.0.0g-fips mod_macro/1.2.1
Location: http://www.domain.com/some/path
您好! (更新後的)答案是否有意義? – larsks 2012-04-04 00:32:30
我只是剛剛看到您的更新,對不起。我會測試它並回復你。乾杯。 – Prisoner 2012-04-04 09:57:45