Nginx的清洁URL,如何用try尝试重写一个文件夹作为参数

我正在用PHP编写一个简单的CMS。 页面(降价文件)和图像以这种方式访问​​(分别):

example.org/?q=about.md
example.org/?i=photo.jpg

或者,我想使用干净的URL与Nginx,使相同的请求看起来像这样:

example.org/about
example.org/photo.jpg

我宁愿用try_filesifrewrite ,但经历过了小时后,我无法得到它的工作。

location / {
    try_files $uri $uri/ /?q=$uri.md =404;
}

location ~ .(gif|jpg|png)$ {
    try_files $uri /?i=$uri =404;
}

我不明白为什么上面的代码不起作用(url的参数工作正常,但漂亮的404错误)。

使用$uri将文件夹名称作为参数传递是否有问题?
我需要逃脱一些奇怪的角色(除了我的房东)吗?


为了彻底,我使用标准的nginx.conf来运行Nginx 1.6.2。 这是我的服务器块的其余部分:

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

链接地址: http://www.djcxy.com/p/25627.html

上一篇: Nginx clean urls, how to rewrite a folder as an argument with try

下一篇: NameNode HA when using hdfs:// URI