【问题标题】:.htaccess URL Argument Rewriting to NGINX.htaccess URL 参数重写为 NGINX
【发布时间】:2013-02-12 22:59:56
【问题描述】:

我们正在将一个 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;    
}

谁能发现我们在这里做错了什么并向我们展示解决方案?

【问题讨论】:

    标签: php apache .htaccess nginx


    【解决方案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

    【讨论】:

    • 感谢您指出这一点。我把你修改后的重写,仍然没有得到我正在寻找的行为。
    • 我写了一个将 URL 变量放入 index.php 的新方法。所以,现在我从一个从 server_URI 创建的数组中定义 $market、$area 和 $id 变量。这是代码:
    • $url_parts = explode('/',$_SERVER['REQUEST_URI']); if(isset($url_parts['1'])) { $market = $url_parts['1']; } if(isset($url_parts['2'])) { $area = $url_parts['2']; } if(isset($url_parts['3'])) { $id = $url_parts['3']; }
    • 然后我找到并复制了以下重写命令到该站点的nginx conf文件中:
    • 位置 / { try_files $uri @rewrite; } location @rewrite { # 一些模块在 URL 的末尾强制没有斜杠 (/) # 否则不需要这个重写块 (GlobalRedirect) rewrite ^/(.*)$ /index.php?q=$1; }
    猜你喜欢
    • 2017-12-18
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多