Apache 正在将%3F等重写为特殊字符(?和=)Nginx
嗨,我的服务器有问题。我有4个网页的入站链接,看起来像这样: myurl.com/default/page.php%3Fid%3D13 它们应该是这样的: myurl.com/default/page.php?id=13 我需要做些什么才能做到这一点?当你访问一个编码的url链接时,Apache会抛出404个错误,你试过了吗?看起来您正在以某种方式对URL进行编码。如果urldecode没有做到这一点,那么您可以编写一个函数,使用类似于的映射来解码这些特定字符。一个可能的解决方案(尽管我不认为这是一个好的解决方案)是设置一个404处理程序,尝试解码URL。也许你可以做一些奇特的匹配来猜测404是否是由于URL被编码造成的Apache 正在将%3F等重写为特殊字符(?和=)Nginx,apache,nginx,rewrite,Apache,Nginx,Rewrite,嗨,我的服务器有问题。我有4个网页的入站链接,看起来像这样: myurl.com/default/page.php%3Fid%3D13 它们应该是这样的: myurl.com/default/page.php?id=13 我需要做些什么才能做到这一点?当你访问一个编码的url链接时,Apache会抛出404个错误,你试过了吗?看起来您正在以某种方式对URL进行编码。如果urldecode没有做到这一点,那么您可以编写一个函数,使用类似于的映射来解码这些特定字符。一个可能的解决方案(尽管我不认为这
if(stripos($url, '%3F') !== false){
header('Location: ' . urldecode($url) );
exit;
}
nginx将请求的文件名与参数分开,并在标准化的URI上运行,因此,在
位置和重写的第一个参数中,%3F
部分只能由?
字符直接匹配(而请求中显式的?
字符在这里永远不会匹配),因此:
rewrite ^/([^?]*)\?(.*)$ /$1?$2? permanent;
更多细节:这将如何实现?我是新手。在nginx服务器配置中,问题不在于php,而在于站点链接到一个带有“page.php%3Fid%3D13”的url,从而导致404。我明白了,应该是“page.php?id=13”。对不起,我以为你是用PHP写的,因为你的问题是用PHP标记的。我不熟悉nginx,我会四处看看。它看起来像nginx有它自己的功能,如本文所述。