當前位置:首頁 » 編程語言 » phprewritenginx

phprewritenginx

發布時間: 2022-11-26 06:10:37

1. 請問nginx伺服器的去index.php的rewrite要怎麼寫

if (!-e $request_filename){rewrite ^/(.*)$ /index.php/$1 last;break;}試過N多種寫法,最終上面這幾行寫法 解決搞定。

2. 如何正確配置Nginx + PHP

先上配置的過程,下面是解釋。

3. 怎麼理解 nginx 中 rewrite 的用法

字面意思就是把abc.com/xxx按abc.com/index.php/xxx來解析
對於/index.php/abc這種url,Apache和lighttpd會按"index.php?abc"來解釋,而nginx會認為是請求名字是「index.php」的目錄下的abc文件的內容。所以一些框架,如CI,在nginx下不配置rewrite是無法運行的,而在Apache和lighttpd則正常。另外,好像nginx里index.php會轉換成index_php,(未求證)
解決方法是
location /
{
index index.php;
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
break;
}
}

4. nginx配置location及rewrite

一個示例:

順序優先順序:

上面的匹配結果,按照上面的location寫法,以下的匹配示例成立:

直接匹配網站根,通過域名訪問網站首頁比較頻繁,使用這個會加速處理,這里是直接轉發給後端應用伺服器了,也可以是一個靜態首頁:

rewrite功能就是,使用nginx提供的全局變數或自己設置的變數,結合正則表達式和標志位實現url重寫以及重定向。rewrite只能放在server{},location{},if{}中,並且只能對域名後邊的除去傳遞的參數外的字元串起作用。

例如 http://aaa.com/a/we/index.php?id=1&u=str 只對/a/we/index.php重寫。語法rewrite regex replacement [flag];

如果相對域名或參數字元串起作用,可以使用全局變數匹配,也可以使用proxy_pass反向代理。

表明看rewrite和location功能有點像,都能實現跳轉,主要區別在於rewrite是在同一域名內更改獲取資源的路徑,而location是對一類路徑做控制訪問或反向代理,可以proxy_pass到其他機器。很多情況下rewrite也會寫在location里,它們的執行順序是:

如果其中某步URI被重寫,則重新循環執行1-3,直到找到真實存在的文件;循環超過10次,則返回500 Internal Server Error錯誤。

因為301和302不能簡單的只返回狀態碼,還必須有重定向的URL,這就是return指令無法返回301、302的原因了。這里last和break區別有點難以理解:

語法為if(condition){…},對給定的條件condition進行判斷。如果為真,大括弧內的rewrite指令將被執行,if條件(conditon)可以是如下任何內容:

-f 和 !-f 用來判斷是否存在文件
-d 和 !-d 用來判斷是否存在目錄
-e 和 !-e 用來判斷是否存在文件或目錄
-x 和 !-x 用來判斷文件是否可執行

例如:

下面是可以用作if判斷的全局變數

例: http://localhost:88/test1/test2/test.php

小括弧 () 之間匹配的內容,可以在後面通過 $1 來引用, $2 表示的是前面第二個 () 里的內容。正則裡面容易讓人困惑的是 \ 轉義特殊字元。

例1:

對形如 /images/ef/uh7b3/test.png 的請求,重寫到 /data?file=test.png ,於是匹配到 location /data ,先看 /data/images/test.png 文件存不存在,如果存在則正常響應,如果不存在則重寫 tryfiles 到新的 image404 location ,直接返回404狀態碼。

例2:

對形如 /images/bla_500x400.jpg 的文件請求,重寫到 /resizer/bla.jpg?width=500&height=400 地址,並會繼續嘗試匹配 location 。

5. centos+Nginx + PHP+mysql,請問我怎麼開啟rewrite

nginx不用開啟rewrite,nginx的重寫規則需要寫在nginx的conf裡面,下面是一些例子

rewrite重寫需要寫在location裡面如

location/{
rewrite^/archiver/((fid|tid)-[w-]+.html)$/archiver/index.php?$1last;
rewrite^/forum-([0-9]+)-([0-9]+).html$/forumdisplay.php?fid=$1&page=$2last;
rewrite^/thread-([0-9]+)-([0-9]+)-([0-9]+).html$/viewthread.php?tid=$1&extra=page%3D$3&page=$2last;
rewrite^/space-(username|uid)-(.+).html$/space.php?$1=$2last;
rewrite^/tag-(.+).html$/tag.php?name=$1last;
}

完整的例子

server
{
listen80;
indexindex.htmlindex.htmindex.phpdefault.htmldefault.htmdefault.php;
root/data/wwwroot/yiqicms;
location/{
if(-f$request_filename/index.html){
rewrite(.*)$1/index.htmlbreak;
}
if(-f$request_filename/index.php){
rewrite(.*)$1/index.php;
}
rewrite^/article/(.+).html$/article.php?name=$1last;
rewrite^/proct/(.+).html/proct.php?name=$1last;
rewrite^/category/([^/]+)_([0-9]+)[/]?/category.php?name=$1&p=$2last;
rewrite^/category/([^/_]+)[/]?/category.php?name=$1last;
rewrite^/catalog/([^/]+)[/]?/catalog.php?type=$1last;
rewrite^/comment.html$/comment.phplast;
rewrite^/sitemap.xml$/sitemap.phplast;
rewrite^/a_(.+).html$/article.php?name=$1last;
rewrite^/p_(.+).html/proct.php?name=$1last;
rewrite^/c_([^/]+)_([0-9]+)[/]?/category.php?name=$1&p=$2last;
rewrite^/c_([^/_]+)[/]?/category.php?name=$1last;
error_page404/404.htm;
}

location~.*.(php|php5)?$
{
try_files$uri=404;
fastcgi_passunix:/tmp/php-cgi.sock;
fastcgi_indexindex.php;
includefcgi.conf;
}

location~.*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires30d;
}

location~.*.(js|css)?$
{
expires30d;
}
}

6. nginx rewrite規則怎麼配置

nginx rewrite重寫規則配置教程
rewrite可以出現的地方有4個:NGX_HTTP_SRV_CONF,NGX_HTTP_SIF_CONF,NGX_HTTP_LOC_CONF,NGX_HTTP_LIF_CONF。分別對應著:

NGX_HTTP_SRV_CONF:配置文件中的server域中的任何地方;
NGX_HTTP_SIF_CONF:配置文件中server域中的if配置中;
NGX_HTTP_LOC_CONF:配置文件中的location域中的任何地方;
NGX_HTTP_LIF_CONF:配置文件中的location域中的if配置中;
例子:

復制代碼代碼示例:
//...
server {
//...
rewrite "^/+$" /index.php break;

if ($uri ~* "^/+abc") {
rewrite "^/+abc" /abc/index.php break;
}

location /xy {
rewrite "^/+xy$" /xy/index.php break;
}
}
其中location的詳細描述和location的強大功能可以在本網站搜索框中輸入「ngingx location」來搜索。
補充
1,break指令
默認值:none ;使用環境:server,location,if ;
該指令的作用是完成當前的規則集,不再處理rewrite指令。

2,if指令
默認值:none ;使用環境:server,location
該指令用於檢查一個條件是否符合,如果條件符合,則執行大括弧內的語句。If指令不支持嵌套,不支持多個條件&&和||處理。

A.變數名,錯誤的值包括:空字元串""或者任何以0開始的字元串
B.變數比較可以使用"="(表示等於)和"!="(表示不等於)
C.正則表達式模式匹配可以使用"~*"和"~"符號
D."~"符號表示區分大小寫字母的匹配
E."~*"符號表示不區分大小寫字母的匹配
F."!~"和"!~*"符號的作用剛好和"~"、"~*"相反,表示不匹配
G."-f"和"!-f"用來判斷文件是否存在
H."-d"和"!-d"用來判斷目錄是否存在
I."-e"和"!-e"用來判斷文件或目錄是否存在
J."-x"和"!-x"用來判斷文件是否為可執行
K.部分正則表達式可以在()內,用$1~$9來訪問
3,return指令
語法:return code ;使用環境:server,location,if ;
該指令用於結束規則的執行並返回狀態碼給客戶端。
例子,如果訪問的URL以".sh"或".bash"結尾,則返回403狀態碼。

復制代碼代碼示例:
location ~ .*.(sh|bash)?$
{
return 403;
}
4,rewrite 指令
語法:rewrite regex replacement flag
默認值:none ; 使用環境:server,location,if
該指令根據表達式來重定向URI,或者修改字元串。指令根據配置文件中的順序來執行。注意重寫表達式只對相對路徑有效。如果你想配對主機名,你應該使用if語句,示例如下:

復制代碼代碼示例:
if( $host ~* www.(.*) )
{
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent;
}

rewrite指令的最後一項參數為flag標記,支持flag標記有:
1.last 相當於apache裡面的[L]標記,表示rewrite。
2.break本條規則匹配完成後,終止匹配,不再匹配後面的規則。
3.redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址。
4.permanent 返回301永久重定向, 瀏覽器地址會顯示跳轉後的URL地址。

使用last和break實現URI重寫,瀏覽器地址欄不變。而且兩者有細微差別,使用alias指令必須用last標記;使用proxy_pass指令時,需要使用break標記。
Last標記在本條rewrite規則執行完畢後,會對其所在server{......}標簽重新發起請求,而break標記則在本條規則匹配完成後,終止匹配。

一般在跟location中(location /{...})或直接在server標簽中編寫rewrite規則,推薦使用last標記;在非根location中(location /cms/{...}),則使用break。

如果URI中含有參數(/app/test.php?id=5),默認情況下參數會被自動附加到替換串上,可以通過在替換串的末尾加上?標記來解決這一問題。
例如:

復制代碼代碼示例:
rewrite ^/test(.*)$ http://www.it.net.cn/home permanent;
訪問http://www.it.net.cn/test?id=5 會跳轉到 http://www.it.net.cn/home?id=5

例如:如果將類似URL /photo/123456 重定向到 /path/to/photo/12/1234/123456.png

復制代碼代碼示例:
Rewrite "/photo/([0-9]{2})([0-9]{2})([0-9]{2})" /path/to/photo/$1/$1$2/$1$2$3.png ;
註:如果正則表達式裡面有花括弧"{"或"}" ,應該使用雙引號或單引號。

5。Set指令
語法:set variable value ; 默認值:none ; 使用環境:server,location,if;
該指令用於定義一個變數,並給變數賦值。變數的值可以為文本、變數以及文本變數的聯合。
例子:set $varname "hello world";

6,Uninitialized_variable_warn指令
語法:uninitialized_variable_warn on|off
使用環境:http,server,location,if
該指令用於開啟和關閉未初始化變數的警告信息,默認值為開啟。

7,Nginx Rewrite可以用到的全局變數

復制代碼代碼示例:
$args ,$content_length ,$content_type ,$document_root ,$document_uri ,$host ,$http_user_agent ,$http_cookie ,$limit_rate ,$request_body_file ,$request_method ,$remote_addr ,
$remote_port ,$remote_user ,$request_filename ,$request_uri ,$query_string ,$scheme ,$server_protocol ,$server_addr ,$server_name ,$server_port ,$uri

Nginx的Rewrite規則編寫實例
1.當訪問的文件和目錄不存在時,重定向到某個php文件

復制代碼代碼示例:
if( !-e $request_filename )
{
rewrite ^/(.*)$ index.php last;
}

2.目錄對換 /123456/xxxx ====> /xxxx?id=123456

復制代碼代碼示例:
rewrite ^/(d+)/(.+)/ /$2?id=$1 last;
3.如果客戶端使用的是IE瀏覽器,則重定向到/ie目錄下

復制代碼代碼示例:
if( $http_user_agent ~ MSIE)
{
rewrite ^(.*)$ /ie/$1 break;
}

4.禁止訪問多個目錄

復制代碼代碼示例:
location ~ ^/(cron|templates)/
{
deny all;
break;
}
5.禁止訪問以/data開頭的文件

復制代碼代碼示例:
location ~ ^/data
{
deny all;
}
6.禁止訪問以.sh,.flv,.mp3為文件後綴名的文件

復制代碼代碼示例:
location ~ .*.(sh|flv|mp3)$
{
return 403;
}
7.設置某些類型文件的瀏覽器緩存時間

復制代碼代碼示例:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*.(js|css)$
{
expires 1h;
}

8.給favicon.ico和robots.txt設置過期時間;
這里為favicon.ico為99天,robots.txt為7天並不記錄404錯誤日誌

復制代碼代碼示例:
location ~(favicon.ico) {
log_not_found off;
expires 99d;
break;
}

location ~(robots.txt) {
log_not_found off;
expires 7d;
break;
}

9.設定某個文件的過期時間;這里為600秒,並不記錄訪問日誌

復制代碼代碼示例:
location ^~ /html/scripts/loadhead_1.js {
access_log off;
root /opt/lampp/htdocs/web;
expires 600;
break;
}

7. 請教一個nginx rewrite或默認文檔的問題

在NGINX操作系統中,要rewrite或設置默認PHP等文件的操作方法如下:

默認:DirectoryIndex index.php
rewrite: 這個根據不同的PHP程序設置
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

8. thinkphp REWRITE模式 nginx 重寫 URL

我覺得這種形式URL重寫,不如路由來的痛快,當然純屬個人建議。
路由規則的定義格式為: '路由表達式'=>'路由地址和傳入參數'

或者:array('路由表達式','路由地址','傳入參數')
在看下例子:'blog/:id'=>'blog/read?status=1&app_id=5',

9. nginx rewrite 怎麼寫

Nginx Rewrite規則相關指令有if、rewrite、set、return、break等,其中rewrite是最關鍵的指令。一個簡單的Nginx Rewrite規則語法如下:
rewrite ^/b/(.*)\.html /play.php?video=$1 break;
如果加上if語句,示例如下:
if (!-f $request_filename)
rewrite ^/img/(.*)$ /site/$host/images/$1 last;
Nginx與Apache的Rewrite規則實例對比

10. Nginx配置rewrite重定向跳轉

1.功能:使用nginx提供的全局變數或自己設置的變數,結合正則表達式和標志位實現url重寫以及重定向。

2.位置:rewrite只能放在server{},location{},if{}中。

3.作用域:只能對域名後邊的除去傳遞的參數外的字元串起作用,例如 http://.com/a/we/index.php?id=1&u=str ,只對/a/we/index.php重寫

4.如果相對域名或參數字元串起作用,可以使用全局變數匹配,也可以使用proxy_pass反向代理。

5.執行順序是:
<1> 執行server塊的rewrite指令
<2.> 執行location匹配
<3. >執行選定的location中的rewrite指令
如果其中某步URI被重寫,則重新循環執行1-3,直到找到真實存在的文件;循環超過10次,則返回500 Internal Server Error錯誤。

6.語法rewrite regex replacement [flag];

7.flag標志位
last : 相當於Apache的[L]標記,表示完成rewrite
break : 停止執行當前虛擬主機的後續rewrite指令集
redirect : 返回302臨時重定向,地址欄會顯示跳轉後的地址
permanent : 返回301永久重定向,地址欄會顯示跳轉後的地址

因為301和302不能簡單的只返回狀態碼,還必須有重定向的URL,這就是return指令無法返回301,302的原因了。這里 last 和 break 區別有點難以理解

8.last一般寫在server和if中,而break一般使用在location中,
last不終止重寫後的url匹配,即新的url會再從server走一遍匹配流程,而break終止重寫後的匹配,
break和last都能組織繼續執行後面的rewrite指令

9 常用正則
. : 匹配除換行符以外的任意字元
? : 重復0次或1次

10 例子:

熱點內容
系數參數配置什麼意思 發布:2025-01-17 00:34:03 瀏覽:755
台灣免費伺服器雲主機 發布:2025-01-17 00:29:07 瀏覽:870
c語言sizeofchar 發布:2025-01-17 00:29:01 瀏覽:469
安卓手機的雲備份在哪裡能找到 發布:2025-01-17 00:14:12 瀏覽:472
詐騙的腳本 發布:2025-01-16 23:51:27 瀏覽:315
電腦配置有點低怎麼玩和平精英 發布:2025-01-16 23:46:14 瀏覽:819
ipfs分布式伺服器是什麼幣種 發布:2025-01-16 23:32:29 瀏覽:992
android動態icon 發布:2025-01-16 23:03:12 瀏覽:605
優酷電腦緩存在哪 發布:2025-01-16 22:58:29 瀏覽:298
進口途銳哪個配置好 發布:2025-01-16 22:35:24 瀏覽:962