DDR爱好者之家 Design By 杰米

nginx+php 使用的时候经常需要伪静态,一般大家都手动设置。那有没有办法让 nginx 自动补全路径呢?
这两天折腾很久,才实现了这样一个功能:
请求 /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,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
规则:
一般在非根的location中配置rewrite,都是用的break;而根的location使用last比较好,因为如果配置了fastcgi或代理访问jsp文件的话,在根location下用break是访问不到

正则表达式形式的模式匹配,如~*和~

  • ‘~'表示大小写敏感的匹配
  • ‘~*'表示大小写不敏感的匹配(例如:“firefox”字符串可以成功匹配“FireFox”)
  •  !~和!~*代表跟后面的正则匹配规则相反的规则,表示不能匹配当前正则表达式规则的字符串执行后面的处理语句
  • 使用-f参数以及!-f参数检测一个文件是否存在
  • 使用-d参数以及!-d参数检测一个目录(路径)是否存在
  • 使用-e以及!-e检测是否存在一个文件,一个目录或者一个符号链接。
  • 使用-x以及!-x检测一个文件是否可执行
  • 正则表达式部分可以嵌套,表达式后面的部分如果用到前面的表达式可以用 $1 到$9 变量表示。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。