Yaf:nginx重寫規則

來源:互聯網
上載者:User

標籤:檔案   io   re   c   html   代碼   

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



將這行代碼放在server{}塊裡面即可。

解釋一下含義:

首先是nginx的try_files指令,當一個請求發生時,比如"/abc",它會檢查"/abc"($uri)檔案是否存在以及"/abc/"($uri/)目錄是否存在,如果不存在,則重新導向到最後一個參數"/index.php$is_args$args".

我們知道index.php是架構的"入口檔案"。

而$args是nginx內建變數,代表url中的query字串,也就是get參數啦,像"a=1&b=2&c=3"。

$is_args取決於$args,用三元一次運算式表示:$is_args = empty($args)?‘‘:‘?‘;

 這樣一來,假設幾個url,看看是如何重新導向的:

/index/index  => /index.php

/admin/index?id=1  => /index.php?id=1

很奇怪是嗎,重新導向以後,路徑都消失了,那麼架構內部又如何路由呢?

答案是$_SERVER[‘REQUEST_URI‘](這裡並不是唯一途徑,架構還會考慮PATH_INFO以及IIS下有特殊處理,但是我們nginx和apache只要有request_uri就可以了),只需要知道一點:雖然nginx內部重新導向了,但是REQUEST_URI參數是沒有改變的,它代表的是原始的url,也就是瀏覽器地址欄中的url。

上面兩個重新導向發生後,實際上:

$_SERVER[‘REQUEST_URI‘]="/index/index";

$_SERVER[‘REQUEST_URI‘]="/admin/index?id=1";

之後架構會根據$_SERVER[‘REQUEST_URI‘]來路由解析。

最後附上我自己的一個配置:

server{                listen       80;                server_name 你自己的網域名稱;                index index.html index.htm index.php;                root  /home/wwwroot/yaf;                try_files $uri $uri/ /index.php$is_args$args;                location ~ .*\.(php|php5)?$                        {                                fastcgi_pass  unix:/tmp/php-cgi.sock;                                fastcgi_index index.php;                                include fcgi.conf;                        }                location /status {                        stub_status on;                        access_log   off;                }                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$                        {                                expires      30d;                        }                location ~ .*\.(js|css)?$                        {                                expires      12h;                        }                access_log  /home/wwwlogs/access.log  access;}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.