我正在将我的mediawiki网站转换为使用nginx作为后端用于php的静态文件的前端。到目前为止我已经完成了所有工作,除了当我查看根目录“example.com”时它尝试提供目录列表并给出403错误,因为我已经禁用并且没有索引文件。
我现在使用的apache重写规则就是:
RewriteRule ^$ /wiki/Main_Page [L]
我在nginx中尝试过与location指令类似的东西,但它不起作用:
location = / {
rewrite "^$" /wiki/Main_Page;
}
我的其他位置指令是:
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/wiki/(.*)$ /w/index.php?title=$1&$args;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri /w/index.php?title=$1&$args;
expires max;
log_not_found off;
}
location ~ \.php?$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
我可以简单地在其中放入一个带有标题('Location:')的index.php文件,但我宁愿用重写规则正确地执行它。
我在网上找到的使用nginx运行mediawiki的所有示例都将wiki作为wiki.example.com而不是/ wiki /子目录运行。
编辑:我也尝试添加像这样的try_files:try_files $uri $uri/ @rewrite /wiki/Main_Page;
,同样有403错误结果。
答案 0 :(得分:34)
我在nginx irc聊天中找到了帮助。
基本上我需要做的是使用return而不是重写。所以我改变了这个:
location = / {
rewrite "^$" /wiki/Main_Page;
}
到此:
location = / {
return 301 http://www.example.com/wiki/Main_Page;
}
答案 1 :(得分:17)
我更喜欢使用:
location = / {
return 301 http://$host/wiki/Main_Page;
}
答案 2 :(得分:3)
在位置部分中使用重写规则,如下所示:
location = / {
rewrite "^.*$" /wiki/Main_Page break;
}
在这里注意“休息”。意味着打破重写周期。
如果此页面位于后端服务器中,则应使用proxy_pass。
答案 3 :(得分:1)
您使用的答案是重定向,让您跳过/
位置到/wiki
位置,您可以尝试这样做
location = / {
rewrite ^ /w/index.php?title=Main_Page&$args last;
}
这应该为/
URI
答案 4 :(得分:0)
这是我的解决方法:
if ($uri = '/'){
rewrite ^/(.*)$ http://example.com/wiki/Main_Page permanent;
}
答案 5 :(得分:0)
在rewrite
部分中添加server
指令:
server {
...
rewrite ^/$ /wiki/Main_Page
...
}
答案 6 :(得分:0)
如果要使用subdir的HTML文件作为默认index.html。例如,将/main/mainView.html
复制到/index.html
并在index.html
中使用基标记来设置相对位置的基路径。