我在 nginx 1.9.3/OpenBSD 5.8 上运行多语言 wiki(MediaWiki 1.26.2 和MobileFrontend )。
对于每个语言 wiki,我都有一个单独的 MediaWiki 安装文件夹和一个指向该文件夹的子域(如 en.domain.com)。
我想使用桌面视图的 MediaWiki 安装文件夹为移动视图添加像 en.m.domain.com 这样的子域,但附加一个&mobileaction=toggle_view_mobile
(或者?mobileaction=toggle_view_mobile
如果已经有参数,则使用问号而不是 & 号) .
我还使用 CORS、短 URLhttp://
和从to重定向https://
。
这是我的服务器块的样子:
server {
listen 80;
server_name en.m.domain.com;
root /path/to/domain/en;
index index.html index.htm index.php;
autoindex off;
# CORS
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Accept, Content-Type, Origin';
# Redirect to https://
if ($http_cf_visitor ~ '{"scheme":"http"}') {
return 301 https://$server_name$request_uri;
}
location = / {
return 301 https://en.m.domain.com/wiki/Main_Page;
}
location = /w {
return 301 https://en.m.domain.com/wiki/Main_Page;
}
location = /w/ {
return 301 https://en.m.domain.com/wiki/Main_Page;
}
location = /wiki {
return 301 https://en.m.domain.com/wiki/Main_Page;
}
location = /wiki/ {
return 301 https://en.m.domain.com/wiki/Main_Page;
}
# Short URLs
location / {
index index.php;
error_page 404 = @mediawiki;
}
location @mediawiki {
rewrite ^/wiki([^?]*)(?:\?(.*))? /w/index.php?title=$1&$2 last;
}
location ~ \.php5?$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:1234;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
location ~ \.php?$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:1234;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
# Append mobileaction=toggle_view_mobile for mobile version
location / {
# If there are no arguments add a question mark
if ($args = '') {
set $new_request_uri "$request_uri?mobileaction=toggle_view_mobile";
}
# If there are already arguments add an ampersand
if ($args != "") {
set $new_request_uri "$request_uri&mobileaction=toggle_view_mobile";
}
rewrite $new_request_uri last;
}
}
不幸的是,这mobileaction=toggle_view_mobile
部分不起作用:(
任何想法如何解决这一问题?
谢谢和欢呼,
直到
您当前的实现存在多个问题:您有两个
location /
块并且rewrite $new_request_uri last;
在语义上不正确。简单的解决方案是
$request_uri
通过执行外部重定向来修改。这很麻烦,因为您只需要识别那些没有mobileaction
参数的 URI。例如:该
rewrite
指令负责?
vs&
并自动附加现有的参数列表。if
块可以放置在块内部location /
或上方。