我是第一次使用 Nginx,对它基本上一无所知.
I'm using Nginx for the first time ever, and got basically no knowledge of it.
我需要将 100 多个 URL 中的_"替换为-".我想一定有一种简单的方法可以用 Nginx 做到这一点,但在 Google 上找不到任何东西.
I need to replace "_" with "-" in 100+ URL. I figured there must be an easy way to do this with Nginx, but can't find anything on Google.
谢谢!
我的网址例如:www.mywebsite/this_category/page1.php
我需要把它变成:www.mywebsite/this-类别/page1.php
推荐答案2013-04 和 2015 年对这个问题的现有答案都相当不理想和丑陋——一个依赖于太多的复制粘贴并且错误处理/报告不清楚,另一个涉及到客户端处理数量不确定的不必要的 301 Moved 交互.
Both existing answers to this question from 2013-04 and 2015 are rather suboptimal and ugly — one relies on too much copy-paste and has unclear error handling/reporting, and another one involves having an undefined number of unnecessary 301 Moved interactions for the client to handle.
有更好的方法,隐藏在 2013 年的 QA 对中-02 — 仅在 2013-04 年提出的这个问题之前几个月!它涉及依赖 last 参数的 nginx/r/rewrite 指令,如果 last 结果匹配,这将导致 nginx 停止处理重写指令,并返回寻找适当的新"location 根据修改后的 $uri,导致 nginx 内最多 10 次的内部重定向循环(例如,10 次内部重定向,根据 nginx/r/internal),如果超过 10 个周期的限制,则记录 500 Internal Server Error.
There's a better way, hidden in plain sight at a QA pair from 2013-02 — only a couple of months prior to this very question from 2013-04! It involves relying on the last parameter for the nginx/r/rewrite directive, which will cause nginx to stop processing the rewrite directives should one with last result in a match, and go back in search of an appropriate "new" location per the modified $uri, causing an internal redirect loop within nginx for up to 10 times (e.g., 10 internal redirects, as per nginx/r/internal), recording a 500 Internal Server Error if you exceed the limit of 10 cycles.
从某种意义上说,这个答案与原始答案相似,只是您免费获得了 10 倍的额外系数,从而减少了复制粘贴的要求.
In a sense, this answer is similar to the original one, it's just that you get an extra factor of 10 for free, resulting in fewer copy-paste requirements.
# Replace maximum of 3 or 1 underscores per internal redirect, # produce 500 Internal Server Error after 10 internal redirects, # supporting at least 28 underscores (9*3 + 1*1) and at most 30 (10*3). location ~ _ { rewrite "^([^_]*)_([^_]*)_([^_]*)_(.*)$" $1-$2-$3-$4 last; rewrite "^([^_]*)_(.+)$" $1-$2 last; return 301 $uri; }更多推荐
如何用 Nginx 替换下划线以破折号
发布评论