我有以下格式的URL:
/wiki/index.php?title=Widget
/wiki/index.php?title=Blue
/wiki/index.php?title=Red
/wiki/index.php?title=Etc
我希望能够匹配任何具有模式“ /wiki/index.php?title=”或什至只是“ /wiki/index.php”的URL(但是它将使用“?”),然后将其重定向到简单的/ wiki /(与上述模式匹配的所有页面都转到单个URL / wiki /)
我曾经在/ wiki /目录中安装了一个Mediawiki,其中包含许多上述格式的页面。但是,现在我正在运行Wordpress安装,并且正在使用/ wiki /目录。我不需要每个重写的URL都可以转到不同的URL(我知道这很困难,因为我的源URL具有参数),但是现在它们都为404,所以我只想直接将它们指向/wiki/。>
答案 0 :(得分:1)
最简单的情况(使用任何参数重写所有/wiki/index.php
请求)可以通过此配置(在server
块内部)完成:
location = /wiki/index.php {
rewrite .* /wiki/?;
}
“?”在第二个rewrite
参数末尾加符号是一种技巧,它可以完全删除所有请求参数。没有它,请求/wiki/index.php?title=Widget
将被重写为/wiki/?title=Widget
。
仅重写与/wiki/index.php?title=...
匹配的请求比较复杂,如果没有if
的构造,我不知道怎么做:
location = /wiki/index.php {
if ($request_uri ~ ^/wiki/index\.php\?title=) {
rewrite .* /wiki/?;
}
}
如果要生成HTTP 301或302重定向而不是简单的URL重写,则可以在末尾使用redirect
(用于301临时重定向)或permanent
(用于302永久重定向)标志rewrite
指令参数(请参见documentation)。
此任务并不像看起来那样困难。要将/wiki/index.php?title=Widget
重定向到/wiki/Widget
,将/wiki/index.php?title=Blue
重定向到/wiki/Blue
等,我们可以使用map
伪指令:
map $request_uri $uri_suffix {
~^/wiki/index\.php\?title=([^&]*) $1;
}
server {
...
location = /wiki/index.php {
rewrite .* /wiki/$uri_suffix?;
}
...
}
请注意,map
指令必须在您的server
配置块的外部处声明!