【问题标题】:Converting a regex Apache mod_rewrite RewriteCond to Nginx将正则表达式 Apache mod_rewrite RewriteCond 转换为 Nginx
【发布时间】:2015-05-08 01:07:12
【问题描述】:

这是我的 Apache .htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    # rewrite /{bookVerb}/{qs} to /book/{qs}
    RewriteCond $1 ^((book|reservar|reserver|buchen|riservare)($|\/.*)) [NC]
    RewriteRule ^(.*)$  /book/%2 [L]
</IfModule>

如何在 nginx 服务器上使用它?

【问题讨论】:

    标签: apache mod-rewrite nginx


    【解决方案1】:

    尝试在 server { } 块中添加以下规则

    if ($request_uri ~* ^/en/(?:book|reservar|reserver|buchen|riservare)(?:/(.*))?$) {
        rewrite ^ /book/$1 break;
    }
    

    我假设您想要捕获并传递 /reservar/.. 等之后的内容。在您的原始规则中,%2 实际上是捕获 {bookVerb},而不是 {qs}

    【讨论】:

    • 谢谢。我原来的帖子有点不正确,因为完整的 URL 前面有一个本地字符串(en/book、es/reservar 等)。所以这个建议失败了。我尝试修改 ^/(?:en\/book| 等...但出现内部服务器错误。
    • 将其更改为^/en/(...。正则表达式中的正斜杠通常不需要转义(除非它像 JavaScript)。
    • 这仅适用于 /en/book 和 /en/reservar 而不是 /es/reservar,但是我在 /en 上收到内部服务器错误,所以我认为存在问题那里的代码?
    • 仅用于测试如果您使用~* (abc)$en/abces/abc 是否会转到book/abc?这将检查 nginx 是否设置为重写。
    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2021-11-26
    • 2019-09-04
    • 1970-01-01
    • 2011-10-02
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多