Nginx
在 nginx 上為移動子域的 request_uri 添加一個參數
我在 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、短 URL
http://
和從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。例如:if ($args !~* mobileaction) { rewrite ^ $uri?mobileaction=toggle_view_mobile permanent; }
該
rewrite
指令負責?
vs&
並自動附加現有的參數列表。
if
塊可以放置在塊內部location /
或上方。