請教個apache rewrite的問題
PHPz
PHPz 2017-05-16 17:04:19
0
3
760

#

不知道為啥rewrite後少了個斜線

下面是go.php程式碼

<?php
$url=$_GET['url'];
$url=urldecode($url);
echo $url;
?>

rewrite規則如下

RewriteEngine On
RewriteRule ^go/(.*)$ go.php?url= [QSA]
PHPz
PHPz

学习是最好的投资!

全部回覆(3)
巴扎黑

參考 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之吧。

漂亮男人

http://php.net/manual/zh/function.urldecode.php

巴扎黑

我猜是 Apache 把路徑中的 // 化简成一个 / 了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板