如何配置.htaccess:公共目录无对应文件时跳转至index.php
实现public目录文件不存在时跳转至index.php的配置方案
需求说明
当public目录中的文件不存在时,跳转至index.php,具体场景要求:
- 访问
/localhost/project/时显示/public/index.php - 访问
/localhost/project/wrongpath时显示/public/index.php - 访问
/localhost/project/js/main.js时显示/public/js/main.js
目录结构
htdocs ├── project │ └── public │ ├── index.php │ ├── js │ │ └── main.js │ ├── image │ │ └── def.png │ ├── css │ │ └── main.css │ └── asset
解决方案
Apache 服务器(使用 .htaccess)
在htdocs/project/目录下创建.htaccess文件,添加以下规则:
RewriteEngine On # 检查public目录下是否存在请求的文件/目录,存在则直接访问 RewriteCond %{DOCUMENT_ROOT}/project/public%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}/project/public%{REQUEST_URI} -d RewriteRule ^(.*)$ /project/public/$1 [L] # 所有不存在的请求转发到public/index.php RewriteRule ^(.*)$ /project/public/index.php [L]
规则说明:
RewriteCond验证public目录下是否存在与请求路径匹配的文件或目录- 如果匹配成功,
RewriteRule将请求直接指向该文件/目录 - 若匹配失败,所有请求都会被转发到
public/index.php
Nginx 服务器
在Nginx配置文件的server块中添加以下配置:
location /project { try_files $uri $uri/ /project/public/index.php; } # PHP解析配置(根据你的PHP版本调整) location ~ \.php$ { fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
规则说明:
try_files依次尝试访问请求的路径、路径目录,若都不存在则转发到public/index.php- 第二个
location块负责处理PHP文件的解析请求
内容的提问来源于stack exchange,提问作者armada45
相关产品推荐
相关产品推荐

