![nginx 重写规则](https://linux22.com/image/497707/nginx%20%E9%87%8D%E5%86%99%E8%A7%84%E5%88%99.png)
我有以下 mod_rewrite 规则
RewriteCond %{HTTP_HOST} !^(host)\.doamin\.com [NC]
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com [NC]
RewriteRule ^(.*) /magento/$1 [L]
我需要在 nginx 中实现这一点,我一直在努力让它工作
谢谢!
更新!
这是对我想做的事情的更好的解释
store1.domain.com
store2.domain.com
因此用户可以进入 store1.domain.com/products/,并且 URL 将保留在那里
我们在 Apache 中这样做
RewriteCond %{HTTP_HOST} !^(host)\.domain\.com [NC]
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com [NC]
RewriteRule ^(.*) /magento/$1 [L]
我们还有一个 dns catchall,它会将所有 *.domain.com 发送到默认的 apache vhost。我绞尽脑汁让它在 nginx 中工作,以保持主机名相同,但在后台重写域以供 magento 解析。
这是我所拥有的,但它只是不断将 /magento/magento/magento 附加到末尾,直到终止循环
if ($http_host !~ "^www.domain\.com$") {
rewrite ^.+ http://$http_host/magento/$uri last;
break;
}
上面的问题是它不断地将其重写为
store1.domain.com/magento/
store1.domain.com/magento/magento/
store1.domain.com/magento/magento/magento/ and so on
这是错误日志
2009/11/03 15:40:26 [error] 22347#0: *2 rewrite or internal redirection cycle while processing "/magento//magento//magento//magento//magento//magento//magento//magento//magento//magento//magento//catalogsearch/advanced/result/", client: 127.0.0.1, server: laptop, request: "GET /catalogsearch/advanced/result/?featured=1 HTTP/1.1", host: "store1.domain.com"
答案1
尝试这样的操作:
server
{
listen 80;
server_name *.domain.com ;
rewrite ^.+ httр://$host/magento/$uri last;
break;
}
更新:
您还可以通过 location+if+regex 在server {}
部分内排除主机名和已完成的重定向
location !~ \/magento\/
{
if ($host !~ "^(www|host)\.domain\.com$")
{
// Here goes your rewrite
}
}
PS. 我认为使用 2 个块可以做得更性感server {}
,但我现在懒得考虑这个 =)