原来windows的服务器换成了linux的nginx服务器,http://www.dnsdizhi.com/t却打不开了,仔细检查后发现http://www.dnsdizhi.com/t/却可以访问。原来不加斜杠时,服务器会访问文件名为t的文件,在windows系统中,如果文件名不存在,它会去访问t的目录,并会自动给目录加斜杠。但是linux系统不会自动判断请求的是一个文件还是一个目录,所以不会自动在请求的最后加上一个斜杠 /,因此http://www.dnsdizhi.com/t打不开。
if (-d
requestfilename)rewrite/(.∗)([/])$http://$host/$1$2/permanent;但如果你的网址后面带了端口的话,那么转向时还是会出现403错误。即
r
e
q
u
e
s
t
f
i
l
e
n
a
m
e
)
r
e
w
r
i
t
e
/
(
.
∗
)
(
[
/
]
)
$
h
t
t
p
:
/
/
$
h
o
s
t
/
$
1
$
2
/
p
e
r
m
a
n
e
n
t
;
但
如
果
你
的
网
址
后
面
带
了
端
口
的
话
,
那
么
转
向
时
还
是
会
出
现
403
错
误
。
即
host 变量把端口弄没了,改成
httphost即可如下代码:if(−d
h
t
t
p
h
o
s
t
即
可
如
下
代
码
:
i
f
(
−
d
request_filename) {
rewrite ^/(.*)([^/])
http://
h
t
t
p
:
/
/
http_host/
1
1
<script type="math/tex" id="MathJax-Element-122">1</script>2/ permanent;
}
这样再对 http://www.dnsdizhi.com/t 请求,nginx 就会进行判断了,如果请求的是一个文件夹,会自动在最后加上 / 符号,如果请求的是一个文件,则不会改变原有 url。 接下来对这段代码进行一个解释:
1、if (-d $request_filename),如果请求的是一个文件夹,则为真,进到if语句中执行
2、rewrite 是执行 url 重写操作。
3、^/(.)([^/])$ 表示以/符号开始并紧跟着任何字符,同时不是以/为结束的字符串,在我的url 中,(.) 表示的 news。
5、permanent 表示,返回永久重定向的 HTTP 状态 301。