我正在尝试为 MediaWiki 网站创建短 URL。该 wiki 位于子目录中mydir
(http://www.example.com/mywiki)。我已经设置了重写,/etc/nginx/sites-available
以便 example.com 重定向到 example.com/mywiki。
当前 URL 类似于http://www.example.com/mywiki/index.php?title=Main_Page
。我想清理 URL 以使其看起来像http://www.example.com/mywiki/Main_Page
。我在执行此操作时遇到了很多麻烦。我不熟悉正则表达式或 nginx 配置文件使用的语法。
这是我目前拥有的:
server_name example.com www.example.com;
location /
{
rewrite ^.+ /mywiki/ permanent;
}
location /wiki/
{
rewrite ^/mywiki/([^?]*)(?:\?(.*))? /mywiki/index.php?title=$1&$2 last;
}
第二次重写显然是有问题的。它基于页面标题--nginx rewrite--root 访问权限在 MediaWiki 文档中。
当我尝试加载网站时,浏览器告诉我我得到了无限重定向。有人知道我应该如何解决这个问题吗?或者说,正确的实现方法是什么,所有这些符号是什么意思?
答案1
他们的表达方式非常有趣。他们的短网址手册主页上有这样一段话:
这些指南已经过时,而且几乎全是坏建议。
无论如何,让我们看看是否可以简化一点。
rewrite ^/wiki/([^\?]*) /mywiki/index.php?title=$1&$args last;
请注意,您不能覆盖“漂亮”路径(您已将其放入块中location
,因此让我们使用它)和物理路径;规范是用作/wiki/
漂亮路径(您的$wgArticlePath
配置)和/w/
物理路径(您的$wgScriptPath
配置)。
总而言之,情况是这样的:
location / {
rewrite ^/$ /wiki/ permanent;
}
location /wiki/ {
rewrite ^/wiki/([^\?]*) /mywiki/index.php?title=$1&$args last;
}
...并且您将需要以某种形式进行 PHP 处理,正如他们在示例中所展示的那样,以及使用Settings.php
适当的设置$wgScriptPath
来更新您$wgArticlePath
,以及将其设置$wgUsePathInfo
为 true。