gpt4 book ai didi

php - Nginx clean urls,如何将文件夹重写为 try_files 的参数

转载 作者:可可西里 更新时间:2023-11-01 12:57:40 26 4
gpt4 key购买 nike

我正在用 PHP 编写一个简单的 CMS。页面(markdown 文件)和图片是这样访问的(分别):

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

可选地,我想在 Nginx 中使用干净的 URL,使相同的请求看起来像这样:

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

我宁愿使用 try_files 而不是 ifrewrite 但是在试验了几个小时之后,我无法让它工作。

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

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

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

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


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

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.

您需要内部重定向,只有在找不到任何文件时才会发生这种情况,但始终会找到 =404

关于php - Nginx clean urls,如何将文件夹重写为 try_files 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com