簡體   English   中英

Nginx try_files不適用於以.php結尾的網址

[英]Nginx try_files not working for urls ending in .php

我的Nginx配置文件中的try_files指令似乎只適用於特定情況。 這是我正在使用的:

   location / {
            try_files $uri $uri/ /route.php?_route_url=$uri;
    }

如果我導航到/admin/popups/image.php它正確加載,因為這是一個現有文件 - (我相信這是try_files語句命中的第一個arg)。 如果我去/ admin / webpages /它正確加載 - 這將是第三個arg - / admin / webpages /不存在而route.php會在/modules/webpages/admin/index.php中提取一個文件。 當我去/admin/webpages/edit.php時,我得到一個404.在我看來它應該在try_files中擊中第三個arg並且工作。 如果我導航到/route.php?_route_url=/admin/webpages/edit.php它運行正常。

我一直在敲打這個問題,我無法理解。 我確信它很簡單,但我看不到它。 謝謝。

更新:進一步調查后,似乎這個塊沒有反映上面的try_files中應該發生的變化:

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors off;
    fastcgi_buffer_size 16k;
    fastcgi_buffers 4 16k;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}

不確定這是否有幫助。 我猜我需要讓原始塊在此之前生效。 謝謝

試試這個,但要確保在服務器{}之間添加這個

location / {
    try_files $uri $uri/ /route.php?_route_url=$args;    
}

別忘了重啟nginx服務

我通過添加這個重寫行找到了我的問題的答案

rewrite ^/admin/((?!popups).)*/([a-zA-Z0-9_-]+\\.php?)$ /route.php?_route_url=$uri&$args last;

值得慶幸的是,我在/ admin /中只有一個實際目錄。

暫無
暫無

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

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