Nginx
Nginx 特定重寫
我對 nginx 重寫感到困惑。如果可以請幫助我..謝謝你
xxxx.conf
#vhost-xxxxx server { listen 80; server_name xxxx.xxxx.com; root /var/www/html; index index.php index.html index.htm; charset utf-8; access_log logs/xxxxxx.access.log; } #rewrite if (!-e $request_filename) { rewrite ^(.+)$ /cn/index.php?q=$1 last; } location ~ \.php$ { root /var/www/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
大家好,我的 nginx 指向 /var/www/html 下的 /var/www/html 根文件夾,我確實有 3 個文件夾 cn,my,en
因此,如果我繼續到 xxxxx.xxxxx.com/cn/ 進行配置,那將沒有問題。
但是當我處理到 xxxxx.xxxxx.com/en 或 /my 時,它顯示 403 Forbidden。
在進行這些設置之前我會嘗試
#rewrite if (!-e $request_filename) { rewrite ^(.+)$ /cn/index.php?q=$1 last; rewrite ^(.+)$ /en/index.php?q=$1 last; rewrite ^(.+)$ /my/index.php?q=$1 last; }
但僅對 cn 有效,其他將被禁止。
如果我的使用者去 /en 它將重寫如何,我怎麼能做到
rewrite ^(.+)$ /en/index.php?q=$1 last;
或者我的使用者去了 /my will rewrite to
rewrite ^(.+)$ /my/index.php?q=$1 last;
我怎樣才能使它具體
ps://我的域名一路都是一樣的。
謝謝你,謝謝幫助
三個重寫規則具有相同的正則表達式,因此只有第一個會被執行。我建議您使用
location
andtry_files
指令而不是if
andrewrite
。server { listen 80; server_name example.com; charset utf-8; access_log logs/xxxxxx.access.log; root /var/www/html; index index.php; location = / { return 301 /cn/; } location / { try_files $uri $uri/ /cn/index.php?q=$uri; } location /en { try_files $uri $uri/ /en/index.php?q=$uri; } location /my { try_files $uri $uri/ /my/index.php?q=$uri; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
注意:我已經刪除並重新排序了您的 PHP 位置塊中的一些指令。
如果您想將上述內容組合成一個正則表達式(這可能效率較低但可擴展):
server { listen 80; server_name example.com; charset utf-8; access_log logs/xxxxxx.access.log; root /var/www/html; index index.php; location = / { return 301 /cn/; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ "^(?<lang>/\w{2})/" { try_files $uri $uri/ $lang/index.php?q=$uri; } }
有關指令及其文件的列表,請參閱此內容。
nginx
編輯:為兩個範例、第一個範例以及兩個範例中的每個範例添加
index
了指令。為了完整起見,添加到 PHP 位置。location =``$uri/``try_files``try_files