以下是我的nginxconfiguration文件。 它应该使/ inc和/ admin / inc内部,但我可以正常访问他们,就像行甚至不存在。 这不是给我一个外部的请求404应该。 我已经尝试过拒绝所有的 相反只是为了testing它是否匹配,但即使否认所有都没有解决。 我试过#nginx和几个系统pipe理员的朋友,我在这里提到。
server { listen 80; root /var/www; server_name localhost; location / { rewrite ^/((?i)sitemap-([^./]+)\.xml)$ /misc.php?google_seo_sitemap=$2; try_files $uri $uri/ /index.php$uri&$args; index index.php; } location /inc { internal; } location /admin { include inc/adminip; location /inc { internal; } location ~ \.php$ { include inc/php; } } error_page 404 /index.php; error_page 500 502 503 504 /50x.html; location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires 7d; access_log off; add_header Cache-Control "public"; } location ~ \.php$ { include inc/php; } }
你没有显示任何url,但我很确定它以.php
。
每个人都应该阅读nginx如何select位置 。
总之,位置是独一无二的,一般nginx喜欢正则expression式位置前缀。 为了防止这种情况,您必须在位置使用flag ^~
:
location ^~ /inc { internal; }
有了这个块,任何以/inc
开头的url都将被拒绝。 但是有一点需要注意,即使像/increment
或/income
这样的URL也会被拒绝,这不是你通常想要的,所以最好使用尾部的斜线:
location ^~ /inc/ { internal; }
和你的第二个内部块应该是
location ^~ /admin/inc/ { internal; }
顺便说一句,你的嵌套的PHP位置内的admin
什么都不做,因为url /admin/whatever.php
由最后的位置块服务。