首頁  >  問答  >  主體

請教個apache rewrite的問題

#

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

下面是go.php程式碼

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

rewrite規則如下

RewriteEngine On
RewriteRule ^go/(.*)$ go.php?url= [QSA]
PHPzPHPz2713 天前718

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑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之吧。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-16 17:06:19

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-16 17:06:19

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

    回覆
    0
  • 取消回覆