基本上,我尝试使用正则表达式设置nginx以便它:
到目前为止,我有:~^(.*)\.(?:pyronexus|notoriouspyro)\.com$
但我似乎无法弄清楚其他任何事情!任何帮助将不胜感激。
编辑:也许有助于显示我的nginx配置文件:
server {
server_name pyronexus.com notoriouspyro.com;
listen 127.0.0.1:80 default_server;
root /home/nginx/pyronexus.com/public;
index index.html index.php;
access_log /home/nginx/pyronexus.com/logs/access.log;
error_log /home/nginx/pyronexus.com/logs/error.log;
include php.conf;
}
server {
server_name ~^(www\.)?(.+)$;
listen 127.0.0.1:80;
return 301 $scheme://$2$request_uri;
}
第一部分是我需要正则表达式的服务器,第二部分是尝试捕获登陆www的所有域并在没有www的情况下重定向它们。
答案 0 :(得分:1)
这种模式似乎是这样做的:
^((?!www).+?)\.(?:pyronexus|notoriouspyro)\.com$
由Regular expression to match a line that doesn't contain a word?提供
在这里测试:
http://regex101.com/r/yK7oE2/1
如果您需要域名,只需省略?:
:
^((?!www).+?)\.(pyronexus|notoriouspyro)\.com$
答案 1 :(得分:1)
退后一步。任务是:
因此,不要使用过于复杂的正则表达式,而是制作三个服务器块。任务列表中的第二个是全部捕获。
答案 2 :(得分:1)
这很简单,就像@Melvyn说的那样,你在想这个,你需要一个捕获所有服务器来处理所有域,然后创建一个特定的服务器来重定向www。
您想要了解您正在访问的主机的最佳变量是$http_host
server {
listen 80 default_server;
# here handle all subdomains, this will also match the non-www domains of
# the both domains
}
server {
listen 80;
server_name www.pyronexus.com;
return 301 http://pyronexus.com$request_uri;
}
server {
listen 80;
server_name www.notoriouspyro.com;
return 301 http://notoriouspyro.com$request_uri;
}