Nginx clean urls,如何用 try_files 重写文件夹作为参数
Nginx clean urls, how to rewrite a folder as an argument with try_files
我正在 PHP 中编写一个简单的 CMS。页面(markdown 文件)和图片是这样访问的(分别):
example.org/?q=about.md
example.org/?i=photo.jpg
可选地,我想在 Nginx 中使用干净的 URL,使相同的请求看起来像这样:
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 可以正常工作,但漂亮的 url 会出现 404 错误)。
使用 $uri
将文件夹名称作为参数传递有问题吗?
我是否需要转义一些奇怪的字符(除了我的房东)?
为了彻底,我是 运行 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;
}
引用 the manual:
Checks the existence of files in the specified order and uses the first found file for request processing; [...] If none of the files were found, an internal redirect to the uri
specified in the last parameter is made.
您需要内部重定向,只有在找到 none 个文件时才会发生这种情况,但总能找到 =404
。
我正在 PHP 中编写一个简单的 CMS。页面(markdown 文件)和图片是这样访问的(分别):
example.org/?q=about.md
example.org/?i=photo.jpg
可选地,我想在 Nginx 中使用干净的 URL,使相同的请求看起来像这样:
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 可以正常工作,但漂亮的 url 会出现 404 错误)。
使用 $uri
将文件夹名称作为参数传递有问题吗?
我是否需要转义一些奇怪的字符(除了我的房东)?
为了彻底,我是 运行 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;
}
引用 the manual:
Checks the existence of files in the specified order and uses the first found file for request processing; [...] If none of the files were found, an internal redirect to the
uri
specified in the last parameter is made.
您需要内部重定向,只有在找到 none 个文件时才会发生这种情况,但总能找到 =404
。