Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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
在nginx中重写RoR的PHP参数_Php_Ruby On Rails_Url Rewriting_Nginx_Routes - Fatal编程技术网

在nginx中重写RoR的PHP参数

在nginx中重写RoR的PHP参数,php,ruby-on-rails,url-rewriting,nginx,routes,Php,Ruby On Rails,Url Rewriting,Nginx,Routes,我有一个网站,以前是用PHP编写的,我用Rails重新编写。它本质上是一个由帖子组成的博客平台。我仍然使用旧的URL方案收到来自Google的请求。他们正在呈现索引页,但他们应该显示引用的特定帖子。例如: (索引,第5页) 应该是: (显示邮政编码6433) 页面参数可以丢弃,它用于注释分页,不再需要。这两个参数都作为params[:page]和params[:postID]传递给Rails,并转到posts控制器中的索引操作。我认为可以在控制器中添加一些逻辑(如果:postID存在,则显示正确

我有一个网站,以前是用PHP编写的,我用Rails重新编写。它本质上是一个由帖子组成的博客平台。我仍然使用旧的URL方案收到来自Google的请求。他们正在呈现索引页,但他们应该显示引用的特定帖子。例如:

(索引,第5页)

应该是:

(显示邮政编码6433)

页面参数可以丢弃,它用于注释分页,不再需要。这两个参数都作为params[:page]和params[:postID]传递给Rails,并转到posts控制器中的索引操作。我认为可以在控制器中添加一些逻辑(如果:postID存在,则显示正确的post),但我认为正确的方法是使用nginx重写来修改url,目前我使用:

rewrite "^/posts\?page=(.*)&postID=(.*)$" /posts/$2 break;
它似乎对传递的URL没有任何影响


我正在寻找帮助,以使正确的重写URL或在RoR路由将工作。

在正则表达式中有特殊的意义-它指定它前面的表达式(在这种情况下,字母
s
)预计会出现0或1次

您需要使用
\
转义

rewrite "^/posts\?page=(.*)&postID=(.*)$" /posts/$2 break;

在正则表达式中有特殊的含义——它指定前面的表达式(在本例中是字母
s
)预期出现0或1次

您需要使用
\
转义

rewrite "^/posts\?page=(.*)&postID=(.*)$" /posts/$2 break;

下面是我如何解决这个问题的:

if ($arg_postID ~ "^([0-9]+)"){
  rewrite ^/(.*) /posts/$arg_postID? permanent;
}
它成功地扭转了局面

进入


结果表明,nginx处理参数(后面有什么?)的方式与URI的其余部分稍有不同。我也可以在重写中访问$arg_页面,但没有必要。如果您有更好的答案,请告诉我。

以下是我解决此问题的方法:

if ($arg_postID ~ "^([0-9]+)"){
  rewrite ^/(.*) /posts/$arg_postID? permanent;
}
它成功地扭转了局面

进入


结果表明,nginx处理参数(后面有什么?)的方式与URI的其余部分稍有不同。我也可以在重写中访问$arg_页面,但没有必要。如果你有更好的答案,请告诉我。

谢谢,我本应该知道的,我想我试过逃避现实了?之前我正在使用您当前编写的命令,得到了相同的结果。重写命令是否需要包含在某个位置或if块中?谢谢,我应该知道,我想我已经尝试过逃逸了?之前我正在使用您当前编写的命令,得到了相同的结果。重写命令是否需要包含在某个位置或if块中?