You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP文件扩展名跳转异常求助:带扩展名URL跳转至首页

嗨,我来帮你搞定这个问题!目前你的网站应该是配置了强制隐藏PHP扩展名的规则,但规则写得有点问题,导致手动输入带.php的URL时直接跳去首页了。咱们可以通过调整服务器的重写规则,既能保留隐藏扩展名的功能,又能让带.php的URL正确导向对应页面,下面分两种常用服务器给你说具体操作:

针对Apache服务器(用.htaccess的情况)

打开网站根目录下的.htaccess文件,把原来的跳转规则替换成下面的内容就行:

# 开启重写引擎
RewriteEngine On

# 1. 允许访问实际存在的PHP文件,不会跳首页
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

# 2. 如果访问不带.php的路径,且对应的PHP文件存在,自动隐藏扩展名(301永久重定向)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1 [R=301,L]

简单说下逻辑:第一部分是当用户访问不带.php的页面时,服务器会偷偷加载对应的PHP文件;第二部分是如果有人手动输入了带.php的URL,会自动重定向到不带扩展名的版本,但会跳转到正确的页面,而不是首页。

针对Nginx服务器

找到你的站点配置文件(一般在/etc/nginx/sites-available/目录下),在server块里添加下面的规则:

# 让不带.php的URL能正确加载对应的PHP文件
location / {
    try_files $uri $uri/ $uri.php?$args;
}

# 访问带.php的URL时,重定向到不带扩展名的对应页面
location ~ \.php$ {
    if (-f $request_filename) {
        rewrite ^/(.*)\.php$ /$1 permanent;
    }
    # 下面是你原来的PHP处理规则,别删掉哦
    fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 这里的PHP版本根据你的实际情况改
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

这里的try_files会让Nginx先尝试访问用户输入的路径,找不到的话再去找对应的PHP文件;后面的规则则是把带.php的URL重定向到干净的版本,同时指向正确页面。

注意事项
  • 修改前记得备份原配置文件,防止改错了没法恢复
  • 改完后要重启服务器:Apache用sudo systemctl restart apache2,Nginx用sudo systemctl restart nginx
  • 如果你的网站用了PHP框架(比如Laravel、WordPress),可能需要调整规则和框架的路由兼容,避免冲突

内容的提问来源于stack exchange,提问作者hamman247

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:13