Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

Nginx URL rewrite for REST API in subfolder

Posted on 2017 年 7 月 14 日2021 年 3 月 12 日 By 日落 在〈Nginx URL rewrite for REST API in subfolder〉中尚無留言

一般來說,要讓 Nginx 遇到 PHP 程式時,只要按照以下寫法就可以將 request 轉接給 php-fpm 處理:

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

    location ~ .php* {
        root /home/www/data;

        include        fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

假設 project 在 document root (如上面的就是 /home/www/data),設定方式其實不難,網路到處都可以找的到。像是 Laravel 可以參考 pretty URL 的設定方式,把 index.php 隱藏起來:

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

上面這個設定,可以讓 request 從「http://my.site/user/1」,被改寫為「http://my.site/index.php/user/1」,這個時候 index.php 就可以從 $_SERVER 的參數來判斷到底要走哪個 route。

但假設寫的專案沒有一個 domain name、沒辦法做 virtual host,可以讓專案根目錄當作 document root,且新的 PHP framework 都會把 index.php 放在 /public 目錄下來避免安全問題,這樣的 URL rewrite 就會出問題。

例如今天的 request 是「http://my.site/project/user/1」,在經過上面的 route 以後會被轉成「http://my.site/index.php/project/user/1」,而實際上我們需要的是「http://my.site/project/index.php/user/1」才能讓專案正確運作。

這時需要另外建立 route 規則。先把 http://my.site/project 對應到的正確檔案路徑設定好:

location ^~ /project {
    # define script real path
    alias /home/www/data/project/public;

    try_files $uri $uri/ /project/public/index.php$uri;
}

到這邊算是設定完成一半,暫停來看一下目前 routing 的情況。請求「http://my.site/project/user/1」會被轉換為「http://my.site/project/public/index.php/project/user/1」。index.php 後半部的參數差了一點點,把「project/」片段拿掉就完成了。

這時我們再新增一條規則,使用 REGEX 來處理後面這段參數:

location @project-rule {
    # 若 URI 起始為 /project/
    # 把後面的參數抓出來,放在 /project/public/index.php/ 後方 
    rewrite ^/project/(.*)$ /project/public/index.php/$1 last;
}

調整後,完整的 Nginx URL rewrite 規則會長這樣:

location ^~ /project {
    alias /home/www/data/project/public;

    # 一般規則無法正確找到路徑
    # 就使用 @project-rule 規則來做查詢
    try_files $uri $uri/ @project-rule;
}

location @project-rule {
    rewrite ^/project/(.*)$ /project/public/index.php/$1 last;
}

Nginx 的 rewrite rule 實在很難 debug,這段是自己花了數小時嘗試錯誤並觀察 $_SERVER 參數變化才找到規律的,希望多少對大家有一點幫助。

Tags:Nginx, PHP, 分享, 資訊學習

天興搬家公司 與 崔媽媽基金會

Posted on 2017 年 7 月 2 日2021 年 3 月 12 日 By 日落 在〈天興搬家公司 與 崔媽媽基金會〉中尚無留言

獲得了一個在新竹工作的機會,六月初從高雄搬家至新竹。在 PTT MoveHouse (搬家) 板上面一直找不到中意的搬家服務,最後在 play.google.com 上面亂找,發現有個 app 叫做「搬家 Easy Go」,列出由崔媽媽基金會評鑑、審核過的搬家公司,於是挑了高雄離家比較近的「天興搬家公司」來協助這次的旅程。

透過網頁上的聯絡方式打電話給高雄經理,經理聽過我的行李數量以後,說大概只需要用最小的卡車 (好像是 3 頓的那型) 半車就可以裝完,且早上八點上車以後,中午過後便可在新竹卸貨,開價是 12000。只要我在早到公司去做確認並簽約即可,費用則是搬家之後才收。

搬家當天遇到鋒面過境下大雨,意料之外的是快遞士大哥居然有準備封膜,把我的電腦椅和幾件重要家具都先包好,上推車以後在蓋一層防水布運送上卡車,全程都不需要我出力,大哥一個人就搞定了。由於雨勢過大,拿行李到高鐵上新竹花掉的時間可能比卡車還要慢,所以就搭了大哥的順風車。

大哥沒啥不良嗜好,也蠻聊的開的,開車也很穩,幾乎不太需要擔心。新竹下車時沒有下雨,一下子就把行李搬進房間,最後付款並填寫問卷。


車上有像大哥詢問了崔媽媽基金會和搬家公司有什麼關連。原來崔媽媽基金會成立主要是用來協助搬家公司建立完整的安全制度,包括各家搬家公司遇到的問題,像是如何固定家具才不會在運送途中損壞,雨天注意事項,或是需要使用吊車來協助家具進出時的安全規範,以及定期為搬家公司建立教育訓練,訓練及驗收。客戶也可以透過崔媽媽基金會找到有保障的搬家公司。

所以可以確定的是,有經過崔媽媽基金會認可的搬家公司,不會遇到家具搬到不見、損毀找不到地方求償、或是搬家後隨意加價等問題的發生,整個交易比較有保障。

以這次的經驗,以後有需求應該也會透過崔媽媽基金會來尋找搬家公司協助搬運。

Tags:分享, 生活雜記

「全勤獎」真的對公司也對員工都很好嗎?

Posted on 2017 年 7 月 2 日2021 年 3 月 12 日 By 日落 在〈「全勤獎」真的對公司也對員工都很好嗎?〉中尚無留言

全勤獎目的是為了讓員工可以盡量員工準時上下班,也盡可能安排假期能考慮到公司的時程。之前和同事討論以後有了不一樣的看法,全勤獎也有可能帶來負面的效果。

以一個工勤的上班族來說,通勤這段時間是完全無法預測的,塞車不說,如果遇到交通事故、或是道路維修等狀況,根本無法預期會花多久的時間到達公司。如果為了預防這樣意外發生而提早出門,自己的生活時間就少了一小時,或是更多,但是公司並沒有補貼這些通勤時間。

另外一個上班族可能的想法,就是在運輸工具上節省通勤時間,也就是「飆車」。但大家也應該都知道飆車的副作用是什麼,遭警察開罰單,或是因此發生交通事故導致無法繼續原來的工作 (住院,或是永久的身體傷害)。

這樣全勤獎的負面效果,似乎比正面效果來的還要大許多,那是否可以用其他方法來取代全勤獎的目的呢?

Tags:分享, 生活雜記

Phalcon PHP framework 的 URL rewrite 方法

Posted on 2017 年 6 月 29 日2021 年 3 月 12 日 By 日落 在〈Phalcon PHP framework 的 URL rewrite 方法〉中尚無留言

幾個比較常見的 PHP framework 像是 Silex、Slim、FuelPHP 和 Laravel,都是將 resource path 直接放在 index.php 後方。例如網址為「/my.site/user/10」則會被改寫為「/my.site/index.php/user/10」,所以在測試環境下,如果不想設定 URL rewrite 可以直接把 resource path 手動放在 index.php 後方。

今天研究 Phalcon 的 routing 很久,不管怎麼設定就是沒有 match 到 controller,而且還沒有任何錯誤訊息。把整個文件都翻遍以後,才發現 .htaccess 有個不一樣的地方:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

Phalcon 的 rewrite 行為和上述的不一樣,resource path 會轉到「_url」這個參數上面,所以若是沒有動到「_url」這個參數,router 就視為要開啟首頁,不管 index.php 後面接什麼都不會改變行為 ….。

可惡,八小時就這樣飛了 …..

Tags:PHP, 生活雜記

GRw – Fallen Ghosts

Posted on 2017 年 6 月 11 日2021 年 3 月 12 日 By 日落 在〈GRw – Fallen Ghosts〉中尚無留言

只想罵一下,沒想到 DLC 只是拿原本破壞遊戲平衡最主要的聯合軍做修改,變成五大步同兵種,而且聯合軍攻擊等級還維持在四個。

遊戲第一個任務完成以後,看起來玩法一樣是蒐集情報、升級武器零件、解開任務,沒有什麼特殊改變。花錢買 DLC 感覺浪費前虐自己而已。
Tags:分享, 生活雜記, 遊戲

文章分頁

上一頁 1 ... 97 98 99 ... 318 下一頁

其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.