Я использую многоязычную вики (MediaWiki 1.26.2 с MobileFrontend) на nginx 1.9.3 / OpenBSD 5.8.
Для каждой языковой вики у меня есть отдельная папка установки MediaWiki и субдомен, например en.domain.com, указывающий на эту папку.
Я хотел бы добавить субдомен, например en.m.domain.com, для мобильного представления, используя установочную папку MediaWiki рабочего стола, но с добавленным &mobileaction=toggle_view_mobile
(или ?mobileaction=toggle_view_mobile
со знаком вопроса вместо амперсанда, если аргумент уже существует).
Я также использую CORS, короткие URL и перенаправляет с http://
к 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
путем выполнения внешнее перенаправление. Это беспорядочно, потому что вам нужно идентифицировать только те URI, которые не имеют mobileaction
аргумент. Например:
if ($args !~* mobileaction) {
rewrite ^ $uri?mobileaction=toggle_view_mobile permanent;
}
В rewrite
директива заботится о ?
против &
и автоматически добавляет существующий список аргументов.
В if
блок можно разместить внутри location /
блок или над ним.