.htaccess通配符配置:根目录子路径映射至pages子文件夹
嘿,这个需求用服务器的重写规则就能轻松实现,不用手动给每个页面加规则,通配符就能搞定!我分Apache和Nginx两种常用服务器给你写配置:
Apache 配置(.htaccess)
把下面的代码放到网站根目录的.htaccess文件里就行:
RewriteEngine On # 排除真实存在的文件和目录,避免干扰静态资源访问 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 检查pages目录下是否存在与请求路径同名的文件夹 RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -d # 转发到对应文件夹下的index.php RewriteRule ^(.*)$ /pages/$1/index.php [L] # 当以上条件都不满足时,返回404错误 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ - [R=404,L]
简单解释下规则逻辑:
- 首先开启重写引擎,这是Apache重写的基础
- 前两个条件确保我们只处理那些不存在的文件/目录请求,不会影响你已有的静态资源(比如图片、CSS)
- 第三个条件专门检查
pages子目录下是否有和当前请求同名的文件夹 - 如果满足所有条件,就把请求转发到对应文件夹的
index.php;如果不满足,直接返回404
Nginx 配置
把下面的代码加到你的Nginx站点配置的server块里:
# 先尝试访问真实存在的文件或目录,找不到再走重写逻辑 location ~ ^/(.*)$ { try_files $uri $uri/ @rewrite; } # 自定义重写规则块 location @rewrite { # 检查pages目录下是否存在对应名称的文件夹 if (-d $document_root/pages/$1) { rewrite ^/(.*)$ /pages/$1/index.php last; } # 不存在则返回404错误 return 404; } # PHP文件解析配置(如果你的Nginx已经有这段可以忽略) location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 请根据你的PHP版本和配置调整路径 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
逻辑说明:
- 第一个
location先尝试直接访问请求的文件或目录,这样不会干扰正常的静态资源访问 - 如果找不到,就转到
@rewrite这个命名块里检查pages目录下的文件夹 - 存在对应文件夹就重写到该文件夹的
index.php,不存在就直接返回404 - 最后一段是PHP解析的基础配置,确保
index.php能被Nginx正确处理
内容的提问来源于stack exchange,提问作者taylorcammack
相关产品推荐
相关产品推荐

