我正在用PHP编写一个简单的CMS。 页面(降价文件)和图像是这样访问(分别):
example.org/?q=about.md example.org/?i=photo.jpg
或者,我想使用干净的URL与Nginx,使相同的请求看起来像这样:
example.org/about example.org/photo.jpg
我宁愿使用try_files
比if
和rewrite
但经过几个小时的试验,我不能得到它的工作。
location / { try_files $uri $uri/ /?q=$uri.md =404; } location ~ \.(gif|jpg|png)$ { try_files $uri /?i=$uri =404; }
我不明白为什么上面的代码不起作用(url参数工作正常,但漂亮的404错误)。
使用$uri
作为parameter passing文件夹名称是否有问题?
我需要逃离一些奇怪的人物(除了我的房东)吗?
为了彻底,我运行Nginx 1.6.2,使用标准的nginx.conf。 这是我的服务器块的其余部分:
server_name example.org; root /srv/example/; index index.html index.htm index.php; (...) location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi.conf; }
而fastcgi.conf也是标准的。
我能够通过简单地省略=404
来让你的例子工作:
location / { try_files $uri $uri/ /?q=$uri.md; } location ~ \.(gif|jpg|png)$ { try_files $uri /?i=$uri; }
引用手册 :
以指定顺序检查文件的存在,并使用第一个找到的文件进行请求处理; […] 如果找不到任何文件,则将内部重定向到最后一个参数中指定的
uri
。
你想要的内部重定向,这只发生,如果没有找到任何文件,但总是找到=404
。