2009-08-23 89 views
0

我想簡單地在我的URL中不使用&符號,這樣當請求文件時,我可以將&符號傳遞到我的系統中。問題是Apache以不同的方式處理它。我不知道如何mod_rewrite用%26替換所有&字符的實例

我已經重寫了要求的文件到index.php?url = $ 1,所以我可以看到它是什麼,但如果它有一個&符號,它不能繼續它!

我該如何逃避&符或將它變成十六進制等於(%26)?

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule>` 

回答

1

添加

RewriteRule ^(.*)\&(.*)$ $1\%26$2 

爲了您的重寫規則。

+0

嗯,這似乎打破了!-f條件從上面,現在所有外部文件無法在服務器上工作 – Supernovah 2009-08-23 08:11:00

+0

你在哪裏把RewriteRule線? – 2009-08-24 00:43:01

0

嘗試把這個規則之上你:

RewriteRule ^([^&]*)&(.*) $1\%26$2 [N] 
0

另外,如果你想發送回瀏覽器重定向在URL中的符號,你可以在[NE]標誌添加到的結束重寫規則。

RewriteRule ^/(.*) /index.php?p=yourpage_\%26_something_else [NC,NE,R=301,L] 
4

1確保網址的您正在構建躲過了&符號爲%26,因此當它到達你的服務器不是一個符號。然後在您的重寫規則添加在B標籤,所以它不會將其轉換回&:

重寫規則^(。*)$ index.php的URL = $ 1 [B,QSA,L]

這個B標籤在嘗試了不同的重寫規則2天后保存了我的屁股。

0

逃脫符號由mod_rewrite修改的查詢字符串的正確方法是

%2526 

,如果它被PHP處理。

當apache重寫它時,它從%2526變成%26,然後php轉換成&並存儲在查詢變量中。

使用B重寫規則也可以工作,但是然後參數中的所有加號在PHP中保持加號。

,我不得不面對的現實世界的例子:

/group/Simon+%26+Garfunkel 

隨着B其重寫爲

group.php?group=Simon+%26+Garfunkel 

,並在PHP你

$group="Simon+&+Garfunkel"; 

當你想要

$group="Simon & Garfunkel" 

爲B,你需要

/group/Simon%20%26%20Garfunkel 

工作正常。

沒有B

group.php?group=Simon%20&%20Garfunkel 

和你結束了

$group="Simon "; 

因爲&分查詢字符串。

但是,如果你雙逃逸

/group/Simon+%2526+Garfunkel 

其重寫爲

group.php?group=Simon%20%26%20Garfunkel 

和你結束了

$group="Simon & Garfunkel"; 

像預期。

如果URL不被mod_rewrite解析爲「乾淨網址」,那麼我們可以使用%26就好了。

相關問題