Nginx的偽靜態(tài)配置中使用rewrite來實現(xiàn)自動補全的實例
nginx+php 使用的時候經(jīng)常需要偽靜態(tài),一般大家都手動設置。那有沒有辦法讓 nginx 自動補全路徑呢?
這兩天折騰很久,才實現(xiàn)了這樣一個功能:
請求 /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.
雖然這種損耗性能的行為不適合部署,但在本機調試的時候還是能夠帶來方便的 :)
server 端應有如下代碼,其他部分使用自己的配置:
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 - 基本上都用這個Flag。
break - 中止Rewirte,不在繼續(xù)匹配
redirect - 返回臨時重定向的HTTP狀態(tài)302
permanent - 返回永久重定向的HTTP狀態(tài)301
規(guī)則:
一般在非根的location中配置rewrite,都是用的break;而根的location使用last比較好,因為如果配置了fastcgi或代理訪問jsp文件的話,在根location下用break是訪問不到
正則表達式形式的模式匹配,如~*和~
- ‘~'表示大小寫敏感的匹配
- ‘~*'表示大小寫不敏感的匹配(例如:“firefox”字符串可以成功匹配“FireFox”)
- !~和!~*代表跟后面的正則匹配規(guī)則相反的規(guī)則,表示不能匹配當前正則表達式規(guī)則的字符串執(zhí)行后面的處理語句
- 使用-f參數(shù)以及!-f參數(shù)檢測一個文件是否存在
- 使用-d參數(shù)以及!-d參數(shù)檢測一個目錄(路徑)是否存在
- 使用-e以及!-e檢測是否存在一個文件,一個目錄或者一個符號鏈接。
- 使用-x以及!-x檢測一個文件是否可執(zhí)行
- 正則表達式部分可以嵌套,表達式后面的部分如果用到前面的表達式可以用 $1 到$9 變量表示。
- Nginx配置PHP的Yii與CakePHP框架的rewrite規(guī)則示例
- WordPress與Drupal的Nginx配置rewrite重寫規(guī)則示例
- Nginx服務器下使用rewrite重寫url以實現(xiàn)偽靜態(tài)的示例
- Nginx下配置pathinfo及ThinkPHP的URL Rewrite模式支持
- Nginx Rewrite規(guī)則與使用介紹和技巧實例
- Nginx偽靜態(tài)配置和常用Rewrite偽靜態(tài)規(guī)則集錦
- nginx rewrite 偽靜態(tài)配置參數(shù)和使用例子
- nginx rewrite重寫規(guī)則與防盜鏈配置方法教程詳解
相關文章
Nginx配置跨域請求Access-Control-Allow-Origin * 詳解
這篇文章主要給大家介紹了關于Nginx配置跨域請求Access-Control-Allow-Origin * 的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Nginx具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06
解決nginx啟動失敗(bind()?to?0.0.0.0:80?failed,An?attempt?was?
這篇文章主要介紹了解決nginx啟動失敗問題(bind()?to?0.0.0.0:80?failed,An?attempt?was?made?to?access?a?socket?in?...),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05

