Nginx的偽靜態(tài)配置中使用rewrite來(lái)實(shí)現(xiàn)自動(dòng)補(bǔ)全的實(shí)例
nginx+php 使用的時(shí)候經(jīng)常需要偽靜態(tài),一般大家都手動(dòng)設(shè)置。那有沒有辦法讓 nginx 自動(dòng)補(bǔ)全路徑呢?
這兩天折騰很久,才實(shí)現(xiàn)了這樣一個(gè)功能:
請(qǐng)求 /a/b/c
若文件不存在,查找 /a/b/index.php,/c 作為 PATH_INFO;
若文件不存在,查找 /a/index.php,/b/c 作為 PATH_INFO;
若文件不存在,查找 /index.php,/a/b/c 作為 PATH_INFO;
若文件不存在,返回 404.
雖然這種損耗性能的行為不適合部署,但在本機(jī)調(diào)試的時(shí)候還是能夠帶來(lái)方便的 :)
server 端應(yīng)有如下代碼,其他部分使用自己的配置:
index index.php index.html index.htm; location / { set $path $request_uri; set $path_info ""; try_files $uri $uri/ @404; } location @404 { if ($path ~ ^(.*)(/.+)$) { set $path $1/index.php; set $path_info $2; rewrite .* $path last; } return 404; } location ~ .+.php($|/) { fastcgi_split_path_info ^(.+.php)(/.+)$; if ($path_info !~ .*) { set $path_info $fastcgi_path_info; } try_files $fastcgi_script_name @404php; fastcgi_param PATH_INFO $path_info; fastcgi_index index.php; include fastcgi.conf; fastcgi_pass unix:/usr/local/var/run/php-fpm.sock; fastcgi_connect_timeout 60; fastcgi_send_timeout 300; fastcgi_read_timeout 300; } location @404php { if ($path = /index.php) { return 404; } if ($path ~ ^(.*)(/.+)/index.php$) { set $path_info $2; set $path $1/index.php; rewrite .* $path last; } return 404; }
Rewrite的Flags
last - 基本上都用這個(gè)Flag。
break - 中止Rewirte,不在繼續(xù)匹配
redirect - 返回臨時(shí)重定向的HTTP狀態(tài)302
permanent - 返回永久重定向的HTTP狀態(tài)301
規(guī)則:
一般在非根的location中配置rewrite,都是用的break;而根的location使用last比較好,因?yàn)槿绻渲昧薴astcgi或代理訪問jsp文件的話,在根location下用break是訪問不到
正則表達(dá)式形式的模式匹配,如~*和~
- ‘~'表示大小寫敏感的匹配
- ‘~*'表示大小寫不敏感的匹配(例如:“firefox”字符串可以成功匹配“FireFox”)
- !~和!~*代表跟后面的正則匹配規(guī)則相反的規(guī)則,表示不能匹配當(dāng)前正則表達(dá)式規(guī)則的字符串執(zhí)行后面的處理語(yǔ)句
- 使用-f參數(shù)以及!-f參數(shù)檢測(cè)一個(gè)文件是否存在
- 使用-d參數(shù)以及!-d參數(shù)檢測(cè)一個(gè)目錄(路徑)是否存在
- 使用-e以及!-e檢測(cè)是否存在一個(gè)文件,一個(gè)目錄或者一個(gè)符號(hào)鏈接。
- 使用-x以及!-x檢測(cè)一個(gè)文件是否可執(zhí)行
- 正則表達(dá)式部分可以嵌套,表達(dá)式后面的部分如果用到前面的表達(dá)式可以用 $1 到$9 變量表示。
- Nginx配置PHP的Yii與CakePHP框架的rewrite規(guī)則示例
- WordPress與Drupal的Nginx配置rewrite重寫規(guī)則示例
- Nginx服務(wù)器下使用rewrite重寫url以實(shí)現(xiàn)偽靜態(tài)的示例
- Nginx下配置pathinfo及ThinkPHP的URL Rewrite模式支持
- Nginx Rewrite規(guī)則與使用介紹和技巧實(shí)例
- Nginx偽靜態(tài)配置和常用Rewrite偽靜態(tài)規(guī)則集錦
- nginx rewrite 偽靜態(tài)配置參數(shù)和使用例子
- nginx rewrite重寫規(guī)則與防盜鏈配置方法教程詳解
相關(guān)文章
Nginx實(shí)現(xiàn)負(fù)載均衡的項(xiàng)目實(shí)踐
在我們實(shí)際生產(chǎn)中,一臺(tái)服務(wù)器的處理能力、存儲(chǔ)空間是有限的,這時(shí)候就需要負(fù)載均衡,本文詳細(xì)的介紹了Nginx實(shí)現(xiàn)負(fù)載均衡的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03nginx rewrite 偽靜態(tài)配置參數(shù)詳細(xì)說(shuō)明
nginx rewrite 偽靜態(tài)配置參數(shù)和使用例子 附正則使用說(shuō)明2010-05-05Nginx利用Lua+Redis實(shí)現(xiàn)動(dòng)態(tài)封禁IP的方法
在站點(diǎn)遇到攻擊且無(wú)明顯攻擊特征,造成站點(diǎn)訪問慢,nginx不斷返回502等錯(cuò)誤時(shí),可利用nginx+lua+redis對(duì)該IP進(jìn)行封禁,這篇文章主要給大家介紹了關(guān)于Nginx利用Lua+Redis實(shí)現(xiàn)動(dòng)態(tài)封禁IP的相關(guān)資料,需要的朋友可以參考下2018-12-12關(guān)于nginx報(bào)錯(cuò)405?not?allowed解決方法總結(jié)
這篇文章主要給大家介紹了關(guān)于nginx報(bào)錯(cuò)405?not?allowed解決方法的相關(guān)資料,nginx遇到post請(qǐng)求靜態(tài)文件會(huì)得到405錯(cuò)誤,文中通過(guò)代碼介紹的非常詳細(xì),也給出了推薦方法,需要的朋友可以參考下2023-10-10