nginx重定向除一个以外的所有目录
Posted
技术标签:
【中文标题】nginx重定向除一个以外的所有目录【英文标题】:nginx redirect all directories except one 【发布时间】:2012-07-14 15:39:25 【问题描述】:我正在使用 nginx 1.0.8,我正在尝试将所有访问者从 www.mysite.com/dir 重定向到谷歌搜索页面 http://www.google.com/search?q=dir,其中 dir 是一个变量,但是如果 dir=="blog"( www.mysite.com/blog) 我只想加载博客内容(Wordpress)。
这是我的配置:
location /
root html;
index index.html index.htm index.php;
location /blog
root html;
index index.php;
try_files $uri $uri/ /blog/index.php;
location ~ ^/(.*)$
root html;
rewrite ^/(.*) http://www.google.com/search?q=$1 permanent;
如果我这样做,甚至 www.mysite.com/blog 都会被重定向到谷歌搜索页面。如果我删除最后一个位置 www.mysite.com/blog 效果很好。
从我在这里读到的内容:http://wiki.nginx.org/HttpCoreModule#location 似乎优先级将首先放在正则表达式上,并且与查询匹配的第一个正则表达式将停止搜索。
谢谢
【问题讨论】:
【参考方案1】:这种情况也可以只使用正则表达式来处理。虽然这是一个非常古老的问题并且已被标记为已回答,但我正在添加另一个解决方案。
如果您使用反向代理使用多个循环转发,这是最简单的方法,无需为每个目录添加单独的位置块。
root html;
index index.php;
location / #Match all dir
try_files $uri $uri/ $uri/index.php;
location ~ /(?!blog|item2)(.*)$ #Match all dir except those dir items skipped
rewrite ^/(.*) http://www.google.com/search?q=$1 permanent;
【讨论】:
【参考方案2】:location /
rewrite ^/(.*)$ http://www.google.com/search?q=$1 permanent;
location /blog
root html;
index index.php;
try_files $uri $uri/ /blog/index.php;
http://nginx.org/r/location
http://nginx.org/en/docs/http/request_processing.html
【讨论】:
以上是关于nginx重定向除一个以外的所有目录的主要内容,如果未能解决你的问题,请参考以下文章