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

如何将动态URL转为静态链接,并用PHP、MySQLI及.htaccess实现

动态链接转静态链接及500错误解决方案

一、.htaccess重写规则配置

要实现example.com/company/famoustech到example.com/company.php?company=famoustech的隐式跳转,需在网站根目录创建/修改.htaccess文件,添加以下规则:

RewriteEngine On
# 排除真实存在的文件和目录,避免干扰正常访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将/company/xxx格式的请求重写到company.php并传递company参数
RewriteRule ^company/([^/]+)$ /company.php?company=$1 [L,QSA]

说明:[L]表示这是最后一条匹配规则,QSA用于保留额外的查询参数(如果有的话)。

二、PHP页面(company.php)代码调整

之前的500错误大概率是重写规则未生效导致参数无法获取,或代码未做容错处理。以下是修正后的安全代码:

// 安全获取并过滤参数
$company_name = isset($_GET['company']) ? trim($_GET['company']) : '';

// 空参数直接返回404
if (empty($company_name)) {
    header("HTTP/1.1 404 Not Found");
    echo "无效的公司名称";
    exit;
}

// 初始化MySQLi连接(替换为你的数据库信息)
$conn = new mysqli('localhost', '数据库用户名', '数据库密码', '数据库名');
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

// 使用预处理语句防止SQL注入
$stmt = $conn->prepare("SELECT * FROM 你的表名 WHERE company_name = ?");
$stmt->bind_param("s", $company_name);
$stmt->execute();
$result = $stmt->get_result();

// 无匹配结果返回404
if ($result->num_rows === 0) {
    header("HTTP/1.1 404 Not Found");
    echo "未找到该公司信息";
    exit;
}

// 获取公司数据并输出
$company_data = $result->fetch_assoc();
echo "公司名称:" . htmlspecialchars($company_data['company_name']);

// 关闭资源
$stmt->close();
$conn->close();

三、首页链接生成优化

你当前的链接写法没问题,但需添加XSS防护:

<a href="/company/<?= htmlspecialchars($row['company'])?>"><?= htmlspecialchars($row['company'])?></a>

四、500错误排查步骤

  1. 检查.htaccess语法:清空文件后仅保留重写规则测试,避免语法错误导致服务器报错。
  2. 确认mod_rewrite启用:Apache服务器需开启mod_rewrite模块,且虚拟主机配置中需设置AllowOverride All(否则.htaccess规则不生效)。
  3. 查看服务器错误日志:500错误的具体原因会记录在服务器的error_log文件中,可通过日志定位代码或配置问题。
  4. 直接测试PHP页面:访问example.com/company.php?company=famoustech,若仍报错,说明PHP代码本身存在问题(如数据库连接错误、语法错误)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:20