我有問題,我想重寫除特定文件夾以外的所有子域。 問題是這是在一個Docker容器內部運行一個外部卷,它是不同主機的動態主機名。所以我必須使用$ hostname。 只要您使用$ hostname,它就會產生與正則表達式規則相同的威脅。因此,爲www創建一個規則不起作用,因爲它對www。$ hostname具有和*。$ hostname相同的威脅,或者在那裏有一個正則表達式。ngnix重定向除www外的每個子域到特定路徑
我想多東西,直接從服務器名稱的變量沒有在所有的工作中提取它,我現在在帶負先行的條件正則表達式是任何正則表達式測試儀工作正常,但不是在ngnix 我2016/02/16 12:28:14 [emerg] 1#0:invalid condition「(?!www。)(\ w」in/etc/nginx/sites-enabled/default:10
任何人都可以?思路
server {
listen 443 ssl;
listen 80;
server_name *.$hostname;
error_log /var/log/nginx/rewrite.log debug;
root /src/webapp/dist;
ssl_certificate /etc/nginx/ssl/server-cert.pem;
ssl_certificate_key /etc/nginx/ssl/server-key.pem;
if ($http_host ~ ((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.$hostname)) {
set $subdomain $1;
return 301 $scheme://www.$hostname/#/$subdomain/media/portfolio/1;
break;
}
}
下面的框還測試,相同的結果沒有重定向工作可言,再次它位於泊塢窗容器內用ngninx 1.4.6-1ubuntu3.4:
server {
listen 80;
listen 443 ssl;
server_name www.$hostname;
root /src/webapp/dist;
ssl_certificate /etc/nginx/ssl/server-cert.pem;
ssl_certificate_key /etc/nginx/ssl/server-key.pem;
}
server {
listen 80;
listen 443 ssl;
server_name *.$hostname;
ssl_certificate /etc/nginx/ssl/server-cert.pem;
ssl_certificate_key /etc/nginx/ssl/server-key.pem;
return 301 $scheme://www.$hostname/#/media/portfolio/1;
}
另一種解決方案由於Nginx的一些奇怪的行爲此NIS什麼,我說,我已經嘗試過。它不工作,因爲它被hjust忽略 – Mario
@Mario請用您的確切代碼更新您的問題我測試了我發佈的代碼,它確實有效。 –
粘貼上面,仍然無法正常工作,沒有使用其他配置,但我發現你不能在正則表達式中使用變量 – Mario