#
不知道為啥rewrite後少了個斜線
下面是go.php程式碼
<?php
$url=$_GET['url'];
$url=urldecode($url);
echo $url;
?>
rewrite規則如下
RewriteEngine On
RewriteRule ^go/(.*)$ go.php?url= [QSA]
巴扎黑2017-05-16 17:06:19
參考 Why is Apache removing multiple slashes?
@Pekka 웃 指出URI中的多個相鄰的/
不符合RFC标准,@Pekka 웃 猜测Apache被设计为将多个相邻的/
合併成一個。
同樣,我搜尋後了解到在nginx中有merge_slashes這樣一項配置,用於開啟或關閉將請求URI中相鄰兩個或更多斜線合併成一個的功能,預設這項配置是開啟的。由此可見,apache和nginx預設在處理URI中多個相鄰/
時行為時一致的,都遵循了RFC標準。
至於http://localhost/go.php?url=http://www.163.com/中的//
沒有合併成一個,而
http://localhost/go/http://www.163.com/中的//
被合併成一個,應該是前者符合RFC標準,而後者不符合。
沒有深入了解RFC標準,所以上面的說法可能不夠嚴密,如有紕漏,望指出。但了解到這種程度個人覺得已經差不多了,至於rewrite規則或代碼怎麼改,就請樓主自行google之吧。