PTAdmin 使用 Laravel 路由处理页面请求。伪静态配置的作用,是把服务器上不存在的文件和目录交给 public/index.php 处理,让后台地址和其他页面可以正常访问、刷新,而不需要在网址中显示 index.php

配置前先确认

无论使用 Nginx、Apache 还是 IIS,都要先确认下面几项:

  • PTAdmin 程序已经上传并完成依赖安装。
  • 网站绑定的运行目录或根目录指向 PTAdmin 的 /public 目录。
  • PHP 版本和扩展符合 PTAdmin 的运行要求。
  • 网站目录具有正常的读取权限,storagebootstrap/cache 具有写入权限。

最重要的是运行目录必须指向 /public。不要把项目根目录直接暴露到公网,否则不仅路由可能异常,还可能泄露 .env 等敏感文件。

Nginx 伪静态

宝塔面板用户可以进入“网站”,打开对应站点的“设置”,然后选择“伪静态”。如果列表中有 Laravel,可以直接选择 Laravel 并保存。

也可以手动填写下面的规则:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

完整配置中的位置

如果是手动维护 Nginx 配置,需要把规则放在当前网站的 server 配置块中。网站根目录需要指向项目的 public 目录,例如:

server {
    listen 80;
    server_name example.com;
    root /www/wwwroot/example.com/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php-fpm.sock;
    }
}

上面的域名、网站路径和 PHP-FPM 地址只是示例,请使用服务器上的实际配置。宝塔已经生成 PHP 配置时,只需要修改运行目录和伪静态,不要重复添加 PHP 配置块。

Nginx 保存后报错

先使用下面的命令检查配置语法:

nginx -t

确认没有报错后再重新加载 Nginx:

nginx -s reload

Apache 伪静态

Apache 需要开启 mod_rewrite 模块,并允许网站读取 .htaccess。PTAdmin 的网站根目录同样要指向 public

创建 .htaccess

在 PTAdmin 的 public 目录中创建或检查 .htaccess 文件,写入下面的内容:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

允许读取 .htaccess

如果 .htaccess 文件存在但规则不生效,需要检查 Apache 站点配置。对应目录应允许覆盖配置:

<Directory "/www/wwwroot/example.com/public">
    AllowOverride All
    Require all granted
</Directory>

请把示例路径换成实际的 public 目录。修改后重启 Apache。

检查 mod_rewrite

Linux 服务器可以使用下面的命令查看模块是否已经加载:

apachectl -M | grep rewrite

看到 rewrite_module 表示模块已经启用。不同 Linux 发行版的启用方式可能不同,请以服务器环境为准。

IIS 伪静态

IIS 需要安装 Microsoft URL Rewrite 模块,并正确配置 PHP FastCGI。网站的物理路径要指向 PTAdmin 的 public 目录。

创建 web.config

public 目录中创建或检查 web.config 文件,写入下面的内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Laravel" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

IIS 配置注意事项

  • IIS 管理器中能够看到“URL 重写”,才表示 URL Rewrite 模块已经安装。
  • 默认文档中应包含 index.php
  • PHP 应通过 FastCGI 正常运行。
  • IIS_IUSRS 用户需要读取网站文件,并对 storagebootstrap/cache 目录具有写入权限。

如何检查是否配置成功

保存配置并重启或重新加载网站服务后,按下面的顺序检查:

  1. 打开网站首页,确认页面可以正常显示。
  2. 打开 PTAdmin 后台登录地址,确认可以进入登录页面。
  3. 登录后台后刷新当前页面,确认不会出现 404。
  4. 检查图片、CSS 和 JavaScript 是否可以正常加载。
  5. 网址中不需要手动添加 index.php

常见问题

首页能打开,其他页面刷新后出现 404

通常是伪静态没有生效。Nginx 检查 try_files,Apache 检查 mod_rewriteAllowOverride All,IIS 检查 URL Rewrite 模块和 web.config

打开网站显示 403

先确认网站根目录是否指向 public,再检查目录权限、默认首页和服务器的访问限制。

打开网站显示 500

500 不一定是伪静态造成的。请检查 PHP 错误日志、网站服务错误日志、storage/logs 日志、PHP 扩展和目录写入权限。

页面没有样式或图片打不开

检查网站域名、HTTPS、运行目录和静态文件路径。不要把真实存在的图片、CSS 和 JavaScript 全部重写到 index.php

修改配置后没有变化

确认修改的是当前域名实际使用的站点配置,并重新加载 Nginx、Apache 或 IIS。浏览器端可以使用 Ctrl + F5 强制刷新。

最后检查一下

  • 网站根目录已经指向 /public
  • 只使用了当前服务器对应的一套伪静态规则。
  • 网站首页和后台地址都可以正常打开。
  • 刷新后台和内容页面不会出现 404。
  • 静态资源可以正常加载。
  • .env 等项目文件不能从公网访问。