【问题标题】:nginx rewrite for clean urlsnginx 重写干净的 url
【发布时间】:2010-08-27 06:19:47
【问题描述】:

我想要完成的是让人们去: http://www.example.com/$SEARCH-QUERY/$PAGE-NUMBER 重定向到 search.php?query=SEARCH-QUERY&page=PAGE-NUMBER

我刚刚弄清楚如何安装 nginx 并配置 php-fpm、mysql 和所有东西,但现在我对重写有点困惑。这是我所拥有的,但似乎无法正常工作:

如果没有发送页面查询,php 脚本将自动假定它是第一页,而且我必须执行两个重写规则,因为我无法弄清楚如何在一行上实现它以便它可以拥有它带和不带斜杠。

rewrite ^/search/(.*)$ /search.php?query=$1; 
rewrite ^/search/(.*)$/ /search.php?query=$1;

然后对于使用分页结果查看的项目

rewrite ^/search/(.*)/(.*)$ /search.php?query=$1&page=$2;
rewrite ^/search/(.*)/(.*)$/ /search.php?query=$1&page=$2;

如果有人可以帮忙,我将不胜感激!

【问题讨论】:

    标签: nginx url-rewriting


    【解决方案1】:

    您的正则表达式中有一个基本错误。

    ^/search/(.*)$/ 永远不会匹配,因为$ 表示“字符串结尾”。字符串末尾不能有/

    如果您需要可选的/,正则表达式中有一个? 修饰符。

    所以,试试/search/(.*)/?$

    【讨论】:

      【解决方案2】:

      此外,您的第一个正则表达式^/search/(.*)/?$ 将匹配以/search/ 开头的所有 请求:它会将页码推送到搜索字符串中,并且还因为* 包含空字符串,它将匹配空搜索字符串。如果第二个正则表达式 ^/search/(.*)/(.*)/?$ 稍后出现,它将永远不会匹配。如果要捕获直到第一个斜线的字符串,请使用^/search/([^/]+)/?$^/search/([^/]+)/([^/]+)/?$(因此通配符匹配不包括/ 的字符串而不是所有字符的字符串,并且+ 匹配一个或-more 而不是任何数字)。

      【讨论】:

        猜你喜欢
        • 2010-11-24
        • 1970-01-01
        • 2023-03-30
        • 2012-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多