产品服务AMH 免费服务器主机面板SSL证书 免费SSL证书申请 担保单 免费安全、零费率交易平台编程助手免费智能写代码、翻译AMYSQL 免费MySQL管理工具

AMH 社区首页

 AMH社区 - 开放自由有价值的社区

[求助帖] nginx規則 求幫忙

wee
铜牌会员
596.00 价值分

wee 发表于 2014-03-31 07:53:41
本帖最后由 wee 于 2014-3-31 19:27 编辑

引用:
if ($query_string ~* "fid=(\d+)(&page=(\w+)*)*") {
set $fid $1;
set $page $3;
rewrite "^([^\.]*)/forumdisplay\.php$" $1/forum-$fid-$page.html? permanent;
}

rewrite "^([^\.]*)/forumdisplay\.php$" $1/forum-$fid-1.html? permanent;
rewrite "^([^\.]*)/forumdisplay\.php$" $1/forum-$fid-$page.html? permanent;

有一個舊論壇discuz7.2 升級到 x3.1 ,想保留SEO收錄給forumdisplay.php 301跳轉
/forumdisplay.php?fid=36 -> forum-36-.html
/forumdisplay.php?fid=36&page=7 -> forum-36-7.html
但是沒有帶$page的時候,nginx取空值,瀏覽時會變404

2014-03-31 07:53:41 1

amysql
创始人
16530.81 价值分

可以if 判断下$page
为空时设置成1
  支持 (0分)  反对 (0分)
回复  2014-03-31 13:28:33 2

AMH面板 - 好用高效低占用、安全可靠极稳定

wee
铜牌会员
596.00 价值分

本帖最后由 wee 于 2014-3-31 19:40 编辑

引用:
amysql 发表于 2014-3-31 13:28
可以if 判断下$page
为空时设置成1

if ($page = "") {
set $page 1;
}
木有反應,有2句set $page
仍然是/forumdisplay.php?fid=36 -> forum-36-.html
正確是/forum-36-1.html

(nginx) set $page $3;
PHP語法怎樣改nginx
$page ? $page : 1
  支持 (0分)  反对 (0分)
回复  2014-03-31 19:36:37 3

amysql
创始人
16530.81 价值分

引用:
wee 发表于 2014-3-31 19:36
if ($page = "") {
set $page 1;
}


if ($page = "") {
set $page 1;
}
可以的。
nginx if不可嵌套,分开写,
另外浏览器缓存也记得清除。
  支持 (0分)  反对 (0分)
回复  2014-04-01 11:42:41 4

wee
铜牌会员
596.00 价值分

引用:
amysql 发表于 2014-4-1 11:42
if ($page = "") {
set $page 1;
}

if ($page = "") {
set $page 1;
}
if ($query_string ~* "fid=(\d+)(&page=(\w+)*)*") {
set $fid $1;
set $page $3;
rewrite "^([^\.]*)/forumdisplay\.php$" $1/forum-$fid-$page.html? permanent;
}

[root@discuz ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

沒有帶$page
rewrite的$page還是取空
錯誤示範/forum-122-.html
正確/forum-122-1.html
  支持 (0分)  反对 (0分)
回复  2014-04-01 16:43:45 5

amysql
创始人
16530.81 价值分

引用:
wee 发表于 2014-4-1 16:43
if ($page = "") {
set $page 1;
}


你这是先设page为1,接着又设置为空了。

这样,

if ($query_string ~* "fid=(\d+)(&page=(\w+)*)*") {
set $fid $1;
set $page $3;
}
if ($page = "") {
set $page 1;
}
rewrite "^([^\.]*)/forumdisplay\.php$" $1/forum-$fid-$page.html? permanent;
  支持 (0分)  反对 (0分)
回复  2014-04-02 09:46:50 6

wee
铜牌会员
596.00 价值分

引用:
amysql 发表于 2014-4-2 09:46
你这是先设page为1,接着又设置为空了。

这样,

謝謝大大
你這樣設置是成功跳轉
現在是整個forumdisplay.php其他參數都會跳轉...

可是我想只含有$fid和$page這兩個參數或其1才實行跳轉
rewrite離開了if ($query_string ~* "fid=(\d+)(&page=(\w+)*)*") {
  支持 (0分)  反对 (0分)
回复  2014-04-03 01:04:40 7

amysql
创始人
16530.81 价值分

引用:
wee 发表于 2014-4-3 01:04
謝謝大大
你這樣設置是成功跳轉
現在是整個forumdisplay.php其他參數都會跳轉...

rewrite可以多作个判断。
或分成两条rewrite,全部不用if也行
一个url没page即跳到/forum-$fid-1.html
有page即到/forum-$fid-$page.html
  支持 (0分)  反对 (0分)
回复  2014-04-03 09:36:58 8

xiaohu
铁牌会员
12.00 价值分

支持 支持 支持 支持
  支持 (0分)  反对 (0分)
回复  2016-03-28 17:06:36 9
 1  (总1页)
AMH社区列表
用户服务中心