2009-05-20 120 views
1

我只是在學習mod_rewrite和正則表達式的東西,我想要做的是將任何名稱的變量,包括任意數量的變量和值傳遞給腳本,並將它們轉發給不同的腳本。mod_rewrite可以保留雙斜槓嗎?

這裏是我到目前爲止有:

RewriteEngine on 
RewriteRule ^script\$(.*[\])? anotherscript?ip=%{REMOTE_ADDR}&$1 [L] 

這一切似乎除了我傳遞的參數是一個工作是一個URL和http後//://總是被剝離下來以一個斜線。

例如,我做

腳本$ URL = http://www.stackoverflow.com

然後將其重定向到:

anotherscript IP = 127.0.0.1 & URL = HTTP:/www.stackoverflow.com

和單斜槓上的第二個腳本扼流圈。

我意識到,保留雙斜槓與人們通常用mod_rewrite做的事完全相反。有沒有辦法保留雙斜線?

編輯:在Gumbo的幫助下找到解決方案。

RewriteCond %{THE_REQUEST} ^GET\ (.*)/script\$([^\s]+) 
RewriteRule ^script\$(.*) anotherscript?ip=%{REMOTE_ADDR}&%2 [L] 

我不得不補充說,(*)在/腳本前面的的RewriteCond,一旦我這樣做,它擺脫了404個錯誤,然後它只是一個通過傳遞匹配的問題。

回答

1

我覺得有可能是壞了你的重寫規則的正則表達式的第一部分

^script\$(.*[\])? 

反斜線(\)用來轉義特殊字符變成litteral一個,因此你實際上是試圖匹配一個結束括號(]),是否打算?

試試這個

RewriteRule ^script\$(.*)? anotherscript?ip=%{REMOTE_ADDR}&$1 [L]