簡體   English   中英

NGINX try_files沒有傳遞給PHP

[英]NGINX try_files does not pass to PHP

我有一個非常簡單的PHP站點:

.  
├── about.php  
├── index.php  
├── project  
│   ├── project_one.php  
│   └── project_two.php  
└── projects.php  

以下nginx配置(僅顯示相關部分):

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/path/to/php.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_intercept_errors on;
}

location / {
    index index.php;
    try_files $uri $uri/ $uri.php =404;
}

擊中/按預期工作。 點擊任何http://my.site.com/{projects | about | project/*} http://my.site.com/{projects | about | project/*} http://my.site.com/{projects | about | project/*} URL應使用try_files命中$uri.php文件,並將其傳遞給PHP。 但相反,瀏覽器只是下載PHP文件本身。

我可以通過為上述位置添加單獨的位置指令來實現它,如下所示:

location /projects {
    try_files $uri $uri/ /$uri.php;
}
location /about {
    try_files $uri $uri/ /$uri.php;
}
location /project {
    try_files $uri $uri/ $uri.php;
}

但這顯然不是這樣做的方法。

我究竟做錯了什么???

每個nginx文檔的try_files

檢查指定順序的文件是否存在,並使用第一個找到的文件進行請求處理; 處理在當前上下文中執行

所以nginx找到PHP文件並在location / therefor的上下文中處理它只是將它作為靜態文件提供。 只有最后一個參數不同,它沒有被檢查,但是nginx進行內部重定向(如果它是uri)或返回錯誤代碼(如果它是=code )。 因此,您需要從try_files中刪除=404以進行內部重定向。 並將try_files添加到location ~ \\.php以確保該文件存在。

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/path/to/php.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_intercept_errors on;
}

location / {
    index index.php;
    try_files $uri $uri/ $uri.php;
}

試試這個:

location / {

    try_files $uri $uri/ /index.php;
    index  index.php;

    ## output: http://my.site.com/about
    rewrite ^/about$ /about.php last;

    ## output: http://my.site.com/projects
    rewrite ^/projects$ /projects.php last;

    ## output: http://my.site.com/projectOne
    rewrite ^/projectOne$ /project/project_one.php last;

    ## output: http://my.site.com/projectTwo
    rewrite ^/projectTwo$ /project/project_two.php last;
}

更新:

location / {

    try_files $uri $uri/ /index.php;
    index  index.php;

    rewrite ^(.*)$ /$1.php; # WITHOUT PHP EXTENSION   
}

暫無
暫無

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

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