0

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

我们在 Apache 上的 .htaccess 命令看起来像这样

RewriteEngine on 

RewriteBase /

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

这个规则让 index.php 明白 $market 来自第一个 URL 参数,$area 来自第二个,$id 来自第三个。

因此,www.domain.com/miami/profiles/100 为 index.php 提供了 $market = miami、$area = profiles 和 $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;    
}

任何人都可以在这里发现我们做错了什么并向我们展示解决方案吗?

4

1 回答 1

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

于 2013-02-12T23:22:44.827 回答