2010-08-27 121 views
4

我试图完成的是让人们去: http://www.example.com/ $ SEARCH-QUERY/$ PAGE-NUMBER重定向到search.php?query = SEARCH-QUERY & page =页号nginx重写为干净的网址

我只是想出了如何安装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; 

查看过的项目。如果任何人都可以请帮助,我不胜感激!

回答

3

你在你的正则表达式一个基本的错误。

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

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

所以,尽量/search/(.*)/?$

1

而且,你的第一个正则表达式^/search/(.*)/?$将匹配开始/search/所有请求:它会推页码入搜索字符串,也因为*包括空字符串,它会匹配空搜索字符串。如果第二个正则表达式来^/search/(.*)/(.*)/?$以后,它永远不会匹配。如果你想捕捉的字符串到第一个斜杠,使用^/search/([^/]+)/?$^/search/([^/]+)/([^/]+)/?$(所以通配符的字符匹配的字符串不包括/,而不是所有字符的字符串,以及+相匹配的一个或更多的,而不是任何号码) 。