簡體   English   中英

Nginx干凈的網址,如何使用try_files將文件夾重寫為參數

[英]Nginx clean urls, how to rewrite a folder as an argument with try_files

我正在用PHP編寫一個簡單的CMS。 頁面(降價文件)和圖像可以像這樣(分別)訪問:

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;
}

我不明白為什么上面的代碼不起作用(帶參數的網址工作正常,但漂亮的代碼有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM