Je ne sais pas pourquoi il manque une barre oblique après la réécriture
Voici le code go.php
<?php
$url=$_GET['url'];
$url=urldecode($url);
echo $url;
?>
Les règles de réécriture sont les suivantes
RewriteEngine On
RewriteRule ^go/(.*)$ go.php?url= [QSA]
Référence Pourquoi Apache supprime-t-il plusieurs barres obliques ?
@Pekka 웃 a souligné que plusieurs
/
adjacents dans l'URI ne sont pas conformes à la norme RFC, @Pekka 웃 a deviné qu'Apache est conçu pour fusionner plusieurs/
adjacents en un seul./
不符合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/中的//
De même, après une recherche, j'ai appris qu'il existe une configuration telle que merge_slashes dans nginx, qui est utilisée pour activer ou désactiver la fonction de fusion de deux ou plusieurs barres obliques adjacentes dans l'URI de la requête en une seule. La valeur par défaut Cette configuration est activée. On peut voir qu'Apache et nginx ont un comportement cohérent lors du traitement de plusieurs
/
adjacents dans l'URI par défaut, et tous deux suivent la norme RFC.Quant au
//
dans http://localhost/go.php?url=http://www.163.com/, ils ne sont pas fusionnés en un seul, mais Les//
dans http://localhost/go/http://www.163.com/ sont fusionnés en un seul. Il devrait être que le premier soit conforme à la norme RFC, tandis que le second le fait. pas. 🎜 🎜Je n'ai pas une compréhension approfondie de la norme RFC, donc la déclaration ci-dessus n'est peut-être pas assez rigoureuse. S'il y a des erreurs, veuillez les signaler. Mais après avoir compris ce niveau, je pense que c'est presque suffisant. Quant à la façon de modifier les règles ou le code de réécriture, veuillez le rechercher vous-même sur Google. 🎜http://php.net/manual/zh/function.urldecode.php
Je suppose qu'Apache a supprimé le
//
化简成一个/
dans le chemin.