我为 NginX 设置了一个重定向,如下所示:
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?permalink=$1 last;
}
它对数千个链接运行良好,但对少数链接则不行
一些不断抛出 404 错误的链接是:
- 个人资料/monico
- 个人资料/hotstar
- 个人资料/jongz
- 简介/奇科
- 个人资料/nagz
- 简介/mico
- 简介/明星
对于数千个其他 profile/* 链接,它工作正常。我尝试通过以下方式访问上述个人资料:
index.php?permalink=profile/jongz
而且它运行良好。因此我推测一定是配置错误或其他原因导致 nginX 抛出 404 - 文件未找到错误,而不是继续rewrite
运行。
这些链接是否包含一些字符或字符组合,从而阻止 nginX 正确重写链接?
答案1
问题出在以下规则:
location ~* .(js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg)$ {
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
}
不确定为什么它没有在表达式的开头选择点。有人知道答案吗?