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
相关产品推荐
相关产品推荐

