在 Debian + LNMP(Linux + Nginx + MySQL + PHP) 环境下,设置伪静态(URL Rewrite)主要是通过 Nginx 的 rewrite 规则 来实现的。下面按常见程序和通用方法详细说明。
Nginx 没有 Apache 的 .htaccess,
伪静态规则一般写在:
server {
location ~ \.php$ {
...
}
location / {
# 伪静态规则一般放这里
}
}
核心配置指令:
try_filesrewritelocation / {
try_files $uri $uri/ /index.php?$args;
}
✅ 含义:
index.phplocation / {
try_files $uri $uri/ /index.php?$args;
}
✅ 无需额外 rewrite
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
}
或(推荐):
location / {
try_files $uri $uri/ /index.php;
}
rewrite ^/topic-(.+)\.html$ /portal.php?mod=topic&topic=$1 last;
rewrite ^/article-([0-9]+)-([0-9]+)\.html$ /portal.php?mod=view&aid=$1&page=$2 last;
rewrite ^/forum-(\w+)-([0-9]+)\.html$ /forum.php?mod=forumdisplay&fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /forum.php?mod=viewthread&tid=$1&page=$2 last;
rewrite ^/group-([0-9]+)-([0-9]+)\.html$ /group.php?mod=group&fid=$1&page=$2 last;
rewrite ^/space-(username|uid)-(.+)\.html$ /home.php?mod=space&$1=$2 last;
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}
或(推荐):
location / {
try_files $uri $uri/ /index.php$uri;
}
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
nginx -t
systemctl reload nginx
或
service nginx reload
✅ 检查:
server {} 内常见原因:
try_files 路径错误root 目录不对| 场景 | 推荐方式 |
|---|---|
| 通用 CMS | try_files |
| 老程序 | rewrite |
| 新项目 | try_files |
| Debian 稳定 | Nginx ≥ 1.18 |
如果你能告诉我:
我可以 直接给你一份可用的完整配置文件 ✅