2013-02-12 109 views
0

我们正在将PHP站点从Apache移植到NGINX,并在尝试让NGINX识别从站点URL传递到index.php的参数时遇到了一个问题。.htaccess URL参数重写为NGINX

我们在Apache的.htaccess命令如下

RewriteEngine on 

RewriteBase/

RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)[/]?$ /index.php?market=$1&area=$2&id=$3 [L] 

该规则允许的index.php明白$市场来自于第一URL参数,$区来源于第二和$ ID来自第三。

所以,www.domain.com/miami/profiles/100提供的index.php以$市场=迈阿密,$面积=曲线并且$ id = 100

我们已经想尽了各种失败的解决方案希望能在网站的NGINX conf文件中达到同样的效果。这里有一些我们已经试过了不起作用:

location /sitename { 
    root /www/sitename; 
    try_files $uri /sitename/index.php?market=$args&area=$args&id=$args; 
} 


location /sitename { 
    root /www/sitename; 
    try_files $uri /sitename/index.php/?market=$args?area=$args?id=$args; 
} 



location /sitename { 
    rewrite "^/index.php/([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z]{3})$" 
    /index.php?market=$1&area=$2&id=$3 last;  
} 

任何人能发现我们在做什么错在这里向我们展示的解决方案?

回答

1

您尝试像这样访问网站:“www.domain.com/miami/profiles/100”,但在您的重写规则中指定请求URL必须包含“index.php”,因此您应该访问它像这样:“www.domain.com/index.php/miami/profiles/100”。或修改您的正则表达式了一点,所以它看起来更清洁:

location /sitename { 
    rewrite "^/([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z]{3})$" 
    /index.php?market=$1&area=$2&id=$3 last;  
} 

现在,您可以访问网站,你想要的方式: www.domain.com/miami/profiles/100

+0

感谢您指出了这一点。我把你修改后的重写,仍然没有得到我期待的行为。 – user2062272 2013-02-15 18:58:30

+0

我写了一个获取URL变量到index.php的新方法。因此,现在我定义从server_URI创建的数组中的$ market,$ area和$ id变量。这里是代码: – user2062272 2013-02-15 19:00:57

+0

$ url_parts = explode('/',$ _ SERVER ['REQUEST_URI']);如果 (isset($ url_parts [ '1'])){ \t \t $市场= $ url_parts [ '1']; } 如果(isset($ url_parts [ '2'])){ \t \t $面积= $ url_parts [ '2']; } 如果(isset($ url_parts [ '3'])){ \t $ ID = $ url_parts [ '3']; \t } – user2062272 2013-02-15 19:01:46