2010-08-27 101 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/([^/]+)/([^/]+)/?$(所以通配符的字符匹配的字符串不包括/,而不是所有字符的字符串,以及+相匹配的一個或更多的,而不是任何號碼) 。