nginx location結尾中有/ 和沒
location用於匹配url
它進行的是模糊匹配
沒有“/”時,location /abc/def可以匹配/abc/defghi請求,也可以匹配/abc/def/ghi等
而有“/”時,location /abc/def/不能匹配/abc/defghi請求,隻能匹配/abc/def/anything這樣的請求
nginx匹配不以 .jpg和 .jpeg 結尾 該怎麼寫
location?!~?\.(jpeg|jpg)$
NGINX正則表達式 匹配不以.jpg和.jpeg結尾
正則去判斷不以什麼結尾好像不好操作。
正則判斷完,代碼裏麵在去做真假操作比較好吧?
nginx怎樣判斷鏈接是否以html結尾
location ~* html$ {}
以html結尾
location ~* \.html$ {}
以 .html 結尾
php nginx整合問題 正常使用php結尾的文件沒有問題
你應該隱藏index.php
location ~* \.php$ 以.php結尾,但你/index.php/login根本不是,所以建議你在全局裏重新寫路由規則
Nginx如何配置可以讓.html後綴的文件當php動態文件執行呢?
有兩種方式修改nginx配置文件可以實現。方式一:打開你的網站的nginx配置文件,然後找到:“location ~ \.php$ {”,再把其中的\.php修改為:“\.php|\.html”,保存後重啟nginx即可。方式二:同上,打開配置文件找到:“location ~ \.php$ {”,然後把location整段複製,在下麵粘帖上,再把\.php修改為\.html,保存後重啟nginx即可生效。上述兩種方式的配置示例代碼如下:location ~ \.php|\.html$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /webs$fastcgi_script_name; include fastcgi_params; }示例代碼二:location ~ \.html$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /webs$fastcgi_script_name; include fastcgi_params; } 到建站技術學習論壇網站查看回答詳情>>
Nginx中的正則如何匹配數字
Nginx中的正則匹配數字:
1、正則表達式匹配
~ 區分大小寫匹配
~* 不區分大小寫匹配
!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配
^ 以什麼開頭的匹配
$ 以什麼結尾的匹配
轉義字符。可以轉. * ?等
* 代表任意字符
2、文件及目錄匹配
-f和!-f用來判斷是否存在文件
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在文件或目錄
-x和!-x用來判斷文件是否可執行
例:
location = /
#匹配任何查詢,因為所有請求都已 / 開頭。但是正則表達式規則和長的塊規則將被優先和查詢匹配
location ^~ /images/ {
# 匹配任何已/images/開頭的任何查詢並且停止搜索。任何正則表達式將不會被測試。
location ~* .(gif|jpg|jpeg)$ {
# 匹配任何已.gif、.jpg 或 .jpeg 結尾的請求
入門
1、if指令
所有的Nginx內置變量都可以通過if指令和正則表達式來進行匹配,並且根據匹配結果進行一些操作,如下:
代碼如下 複製代碼
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
set $id $1;
}
使用符號~*和~模式匹配的正則表達式:
1.~為區分大小寫的匹配。
2.~*不區分大小寫的匹配(匹配firefox的正則同時匹配FireFox)。
3.!~和!~*意為“不匹配的”。
Nginx在很多模塊中都有內置的變量,常用的內置變量在HTTP核心模塊中,這些變量都可以使用正則表達式進行匹配。
2、可以通過正則表達式匹配的指令
location
查看維基:location
可能這個指令是我們平時使用正則匹配用的最多的指令:
代碼如下 複製代碼
location ~ .*.php?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwsite/test.com/$fastcgi_script_name;
include fcgi.conf;
}
幾乎每個基於LEMP的主機都會有如上一段代碼。他的匹配規則類似於if指令,不過他多了三個標識符,^~、=、@。並
且它沒有取反運算符!,這三個標識符的作用分別是:
1.^~ 標識符後麵跟一個字符串。Nginx將在這個字符串匹配後停止進行正則表達式的匹配(location指令中正則表達
式的匹配的結果優先使用),如:location ^~ /images/,你希望對/images/這個目錄進行一些特別的操作,如增加
expires頭,防盜鏈等,但是你又想把除了這個目錄的圖片外的所有圖片隻進行增加expires頭的操作,這個操作可能
會用到另外一個location,例如:location ~* .(gif|jpg|jpeg)$,這樣,如果有請求/images/1.jpg,nginx如何決
定去進行哪個location中的操作呢?結果取決於標識符^~,如果你這樣寫:location /images/,這樣nginx會將1.jpg
匹配到location ~* .(gif|jpg|jpeg)$這個location中,這並不是你需要的結果,而增加了^~這個標識符後,它在匹
配了/images/這個字符串後就停止搜索其它帶正則的location。
2.= 表示精確的查找地址,如location = /它隻會匹配uri為/的請求,如果請求為/index.html,將查找另外的
location,而不會匹配這個,當然可以寫兩個location,location = /和location /,這樣/index.html將匹配到後者
,如果你的站點對/的請求量較大,可以使用這個方法來加快請求的響應速度。
3.@ 表示為一個location進行命名,即自定義一個location,這個location不能被外界所訪問,隻能用於Nginx產生的
子請求,主要為error_page和try_files。
注意,這3個標識符後麵不能跟正則表達式,雖然配置文件檢查會通過,而且沒有任何警告,但是他們並不會進行匹配
。
綜上所述,location指令對於後麵值的匹配順序為:
1.標識符“=”的location會最先進行匹配,如果請求uri匹配這個location,將對請求使用這個location的配置。
2.進行字符串匹配,如果匹配到的location有^~這個標識符,匹配停止返回這個location的配置。
3.按照配置文件中定義的順序進行正則表達式匹配。最早匹配的location將返回裏麵的配置。
4.如果正則表達式能夠匹配到請求的uri,將使用這個正則對應的location,如果沒有,則使用第二條匹配的結果。
server_name
查看維基:server_name
server_name用於配置基於域名或IP的虛擬主機,這個指令也是可以使用正則表達式的,但是注意,這個指令中的正則
表達式不用帶任何的標識符,但是必須以~開頭:
代碼如下 複製代碼
server {
server_name [www.example.com] ~^wwwd+.example.com$;
}
server_name指令中的正則表達式可以使用引用,高級的應用可以查看這篇文章:在server_name中使用正則表達式
fastcgi_split_path_info
查看維基:fastcgi_split_path_info
這個指令按照CGI標準來設置SCRIPT_FILENAME (SCRIPT_NAME)和PATH_INFO變量,它是一個被分割成兩部分(兩個引用
)的正則表達式。如下:
代碼如下 複製代碼
location ~ ^.+.php {
(...)
fastcgi_split_path_info ^(.+.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
(...)
}
第一個引用(.+.php)加上/path/to/php將作為SCRIPT_FILENAME,第二個引用(.*)為PATH_INFO,例如請求的完整
URI為show.php/article/0001,則上例中SCRIPT_FILENAME的值為/path/to/php/show.php,PATH_INFO則
為/article/0001。
這個指令通常用於一些通過PATH_INFO美化URI的框架(例如CodeIgniter)。
gzip_disable
查看維基:gzip_disable
通過正則表達式來指定在哪些瀏覽器中禁用gzip壓縮。
gzip_disable "msie6";rewrite
查看維基:rewrite
這個指令應該也是用的比較多的,它需要使用完整的包含引用的正則表達式:
代碼如下 複製代碼
rewrite "/photos/([0-9] {2})([0-9] {2})([0-9] {2})" /path/to/photos/$1/$1$2/$1$2$3.png;通常環境下我們
會把它和if結合來使用:
代碼如下 複製代碼
if ($host ~* www.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$
http://$host_without_www$1
permanent; # $1為'/foo',而不是'[www.mydomain.com]'}
Nginx中的正則如何匹配中文
首先確定在編譯pcre時加了enable-utf8參數,如果沒有,請重新編譯pcre,然後就可以在Nginx的配置文件中使用這
樣的正則:”(*UTF8)^/[x{4e00}-x{9fbf}]+)$”注意引號和前麵的(*UTF8),(*UTF8)將告訴這個正則切換為UTF8模
式。
代碼如下 複製代碼
[root@backup conf]# pcretest
PCRE version 8.10 2010-06-25
re> /^[x{4e00}-x{9fbf}]+/8
data> 測試
0: x{6d4b}x{8bd5}
data> Nginx模塊參考手冊中文版
No match
data> 參考手冊中文版
0: x{53c2}x{8003}x{624b}x{518c}x{4e2d}x{6587}x{7248}
location順序錯誤導致下載.php源碼而不執行php程序的問題
看下麵的例子片斷(server段、wordpress安裝到多個目錄):
=====================================
代碼如下 複製代碼
location / {
try_files $uri $uri/ /index.html;
}
location /user1/ {
try_files $uri $uri/ /user1/index.php?q=$uri&$args;
}
location ~* ^/(user2|user3)/ {
try_files $uri $uri/ /$1/index.php?q=$uri&$args;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
=====================================
nginx.conf的配置代碼看上去沒有任何問題,而事實上:
訪問 /user1/會正常執行php程序。
訪問 /user2/ 或 /user3/ 都不會執行程序,而是直接下載程序的源代碼。
原因在哪裏?看到他們地區別了嗎?
/user1/是普通location寫法
而/user2/ 或 /user3/ 是正則表達式匹配的location
問題就出在了/user2/ 或 /user3/匹配location指令使用了正則表達式,所以必須注意代碼段的先後順序,必須把
location ~ .php$ {...}段上移、放到它的前麵去。
正確的代碼舉例:
=====================================
代碼如下 複製代碼
location / {
try_files $uri $uri/ /index.html;
}
location /user1/ {
try_files $uri $uri/ /user1/index.php?q=$uri&$args;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
location ~* ^/(user2|user3)/ {
try_files $uri $uri/ /$1/index.php?q=$uri&$args;
}
nginx 偽靜態 不支持圖片 .gif .jpg 這些結尾的都不行? 如何修改nginx 偽靜態參數?
因為content type不對吧,你的php輸出的content type是啥?
nginx的偽靜態rewrite規則,匹配欄目目錄沒有斜杠不能訪問
這個是很顯然的事情,原因在於你的rewrite規則是"^/(.*)(.*)/$" 這樣的話就是必須以/結尾的請求才會轉發。因此會出現你說的第一種情況。
#首頁:
rewrite "^/+" /index....... break;
#其它頁麵
rewrite "^/([^/]*)([^/]*)" index.php break;
PHP程序 nginx 轉發問題,為什麼.gif .jpg 這些結尾的徑無法轉發
rewrite 是重定向,不是轉發
什麼文件補存在?哪裏出錯應該說出來
轉載請注明出處句子大全網 » nginxlocation結尾中有和