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

基于Session变量的.htaccess URL重写及伪静态实现需求

解决方案

一、Apache .htaccess 配置

将以下规则放置在网站根目录的.htaccess文件中,实现动态路由与伪静态效果:

# 开启重写引擎
RewriteEngine On

# 1. 处理首次访问:无CLIENT_NAME会话时,内部转发至index.php初始化
# 匹配 /CLIENT_NAME/ 或 /CLIENT_NAME 请求,且Cookie中无CLIENT_NAME标识
RewriteCond %{HTTP_COOKIE} !CLIENT_NAME=([^;]+) [NC]
RewriteRule ^([^/]+)/?$ /index.php?id=$1 [L,QSA]

# 2. 会话已初始化:将 /CLIENT_NAME/page 映射到 page.php,隐藏.php后缀
# 匹配 /CLIENT_NAME/xxx 格式请求,且Cookie中存在CLIENT_NAME标识
RewriteCond %{HTTP_COOKIE} CLIENT_NAME=([^;]+) [NC]
RewriteRule ^[^/]+/([^/]+)$ /$1.php [L,QSA]

# 3. 默认首页:会话存在时,/CLIENT_NAME/ 直接映射到index.php
RewriteCond %{HTTP_COOKIE} CLIENT_NAME=([^;]+) [NC]
RewriteRule ^[^/]+/?$ /index.php [L,QSA]

二、PHP 会话处理逻辑

在根目录的index.php中添加以下代码,完成客户会话的初始化与校验:

<?php
session_start();

// 处理首次访问的id参数,初始化客户会话
if (isset($_GET['id']) && !isset($_SESSION['CLIENT_NAME'])) {
    $clientName = trim($_GET['id']);
    // 可在此添加客户名称合法性校验逻辑(如数据库查询验证)
    if (!empty($clientName)) {
        $_SESSION['CLIENT_NAME'] = $clientName;
        // 设置Cookie,让Apache重写规则识别会话状态(有效期可按需调整)
        setcookie('CLIENT_NAME', $clientName, time() + 86400 * 30, '/', 'test.com', true, true);
    }
}

// 后续业务逻辑代码...
?>

关键说明

  • Apache无法直接读取PHP Session,因此通过同步设置Cookie让重写规则识别会话状态,这是实现动态路由的核心。
  • 正则[^/]+用于匹配不含斜杠的合法客户名称,若有特殊字符限制,可调整正则规则。
  • QSA标记会保留URL中的额外查询参数,避免参数丢失。
  • 所有需要使用会话的PHP文件,开头需调用session_start()确保会话正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:35:24