Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 正在将%3F等重写为特殊字符(?和=)Nginx_Apache_Nginx_Rewrite - Fatal编程技术网

Apache 正在将%3F等重写为特殊字符(?和=)Nginx

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没有做到这一点,那么您可以编写一个函数,使用类似于的映射来解码这些特定字符。一个可能的解决方案(尽管我不认为这

嗨,我的服务器有问题。我有4个网页的入站链接,看起来像这样:

myurl.com/default/page.php%3Fid%3D13

它们应该是这样的:

myurl.com/default/page.php?id=13

我需要做些什么才能做到这一点?当你访问一个编码的url链接时,Apache会抛出404个错误,你试过了吗?看起来您正在以某种方式对URL进行编码。如果urldecode没有做到这一点,那么您可以编写一个函数,使用类似于的映射来解码这些特定字符。

一个可能的解决方案(尽管我不认为这是一个好的解决方案)是设置一个404处理程序,尝试解码URL。也许你可以做一些奇特的匹配来猜测404是否是由于URL被编码造成的

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有它自己的功能,如本文所述。