我有这些重写规则(我尝试都没有用):
location ~* "^/([a-z0-9]{32})\.png$" { rewrite ^ /index.php?page=log&id=$1 last; }
和
location ~* "/(?<hash>[a-z0-9]{32})\.png" { rewrite ^ /index.php?page=log&id=$hash; }
和
location / { try_files $uri $uri/ @rewrites; } location @rewrites { rewrite "^/([a-zA-Z0-9]{32})\.png$" /index.php?page=log&id=$1 last; #... }
基本上,我希望URL http://example.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png
实际上将parameter passing给我的index.php
脚本,并在脚本中得到:
$db->save_hash($_GET['id']); header('Content-type: image/png'); readfile('images/beacon.png'); break;
但是nginx给了我一个“未find”,但其他重写工作正常。 是什么赋予了?
根据nginx文档的location
指令如何工作:
位置可以由前缀string定义,也可以由正则expression式定义。 …正则expression式的search在第一次匹配时终止,并使用相应的configuration。
根据你自己对这个问题的答案的补充信息,似乎你打算在同一时间同时适用几个定位指令,根据明确的文档明确地不允许这样做。
请记住,nginx的devise更快更清洁。 所以,别指望怪癖!
这个为我工作:
location / { rewrite "/([a-z0-9]{32})\.png" /index.php?page=log&id=$1 break; }
或者,如果你想分离的位置:
location ~* "/([a-z0-9]{32})\.png" { rewrite /(.*) /index.php?page=log&id=$1 last; }
虽然@ unlo的答案似乎是正确的(尝试自己在一个干净的虚拟主机),我看到一个更多的优化。 您可以使用XSendFilefunction让nginx提供这些文件,而不是通过脚本提供静态文件。
马克指出,所以我开始删除所有包括的文件,并归结为:
/etc/nginx/conf.d/h5bp.conf
包含
# Basic h5bp rules include /etc/nginx/conf.d/expires.conf; include /etc/nginx/conf.d/x-ua-compatible.conf; include /etc/nginx/conf.d/protect-system-files.conf;
expires.conf
得到了
# Expire rules for static content # No default expire rule. This config mirrors that of apache as outlined in the # html5-boilerplate .htaccess file. However, nginx applies rules by location, # the apache rules are defined by type. A concequence of this difference is that # if you use no file extension in the url and serve html, with apache you get an # expire time of 0s, with nginx you'd get an expire header of one month in the # future (if the default expire rule is 1 month). Therefore, do not use a # default expire rule with nginx unless your site is completely static # cache.appcache, your document html and data location ~* \.(?:manifest|appcache|html|xml|json)$ { expires -1; access_log /var/log/nginx/static.log; } # Feed location ~* \.(?:rss|atom)$ { expires 1h; add_header Cache-Control "public"; } # Favicon location ~* \.ico$ { expires 1w; access_log off; add_header Cache-Control "public"; } # Media: images, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|gz|svg|svgz|mp4|ogg|ogv|webm)$ { expires 1M; access_log off; add_header Cache-Control "public"; } # CSS and Javascript location ~* \.(?:css|js)$ { expires 1y; access_log off; add_header Cache-Control "public"; } # WebFonts # If you are NOT using cross-domain-fonts.conf, uncomment the following directive location ~* \.(ttf|ttc|otf|eot|woff|font.css)$ { expires 1M; access_log off; add_header Cache-Control "public"; }
评论expires.conf
,然后开始工作,我该如何解决这个问题?