我花了很长时间才让 NGINX 下的重写工作重写旧的 URL 以指向新文件。
XenForo 的论坛提供了此配置:
location /ipb/ {
if ($uri ~* /(topic|forum|user)/) {
rewrite ^ /ipb/ips2xf.php? last;
}
if ($args ~* (^|&)show(topic|forum|user)=) {
rewrite ^ /ipb/ips2xf.php? last;
}
if ($args ~* ^/(topic|forum|user)/) {
rewrite ^ /ipb/ips2xf.php? last;
}
}
但是我的网站不是在目录下运行,而是在子域的根目录下运行。有人告诉我,只需将位置参数更改为“location /”并从重写指令中删除 /ipb/ 即可,但事实并非如此。我已经尝试了大约一百种不同的方法,但在过去两周的尝试后,没有任何进展。
现在,我输入的 URL 都是这样的,比如“http://forums.tvnewstalk.net/index.php?/forum/10-general-tv/“将直接传递到 index.php。我实际上无法证明它正在通过重写规则进行评估,因为无论它看起来如何,它都会按原样将 URL 传递到 index.php。我仔细检查了错误日志和重定向日志,但找不到问题所在。
有什么想法?有什么建议?我对此开始失去理智了。
该子域名的整个配置文件:
server {
listen 80;
server_name beta.tvnewstalk.net
#change your log path as according to your server
access_log /home/tvnewstalk/logs/access.b.log;
error_log /home/tvnewstalk/logs/error.b.log;
rewrite_log on;
root /home/tvnewstalk/www/xf;
index index.php index.html;
gzip on;
client_max_body_size 30M;
# Main location
location / {
if ($uri ~* /(topic|forum|user)/) {
rewrite ^ ips2xf.php? last;
}
if ($args ~* (^|&)show(topic|forum|user)=) {
rewrite ^ ips2xf.php? last;
}
if ($args ~* ^/(topic|forum|user)/) {
rewrite ^ ips2xf.php? last;
}
}
location /internal_data/ {
internal;
}
location /library/ {
internal;
}
## Static files location
location ~* ^.+.(css|js|jpg|jpeg|gif|png|ico)$ {
access_log off;
log_not_found off;
expires 30d;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}