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

PHP中SEO友好URL的配置问题求助

正确实现forum目录的URL路由方案

一、修正.htaccess规则

你的原规则正则语法有误,^应该放在整个匹配模式的开头,而非forum/之后。同时需添加排除真实目录的条件,避免静态资源(如CSS、JS、图片)被错误转发。

根目录下的.htaccess正确配置如下:

# 开启重写引擎
RewriteEngine On

# 排除真实存在的文件和目录,避免影响静态资源及其他正常访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 匹配forum/开头的所有路径,转发到forum/forum.php处理
RewriteRule ^forum/(.*)$ forum/forum.php?page=$1 [L,QSA]
  • [L]:表示这是最后一条规则,匹配后不再执行后续规则
  • [QSA]:保留原URL的查询参数,比如mydomain.net/forum/boats?sort=desc会被转发为forum/forum.php?page=boats&sort=desc

二、优化PHP路由处理代码

原代码可简化,同时避免数组越界问题,使用PHP的null合并运算符更简洁:

// 先判断page参数是否存在,避免直接爆炸空值
$route = isset($_GET['page']) ? explode('/', trim($_GET['page'], '/')) : [];

// 使用null合并运算符获取各层级路由参数
$sidepage = $route[0] ?? null;
$kat = $route[1] ?? null;
$emne = $route[2] ?? null;

// 后续可根据参数做逻辑处理,示例:
if ($sidepage === 'boats' && $kat === 'laws' && $emne === 'this-is-a-post-about-laws') {
    // 加载对应帖子的逻辑
}
  • trim($_GET['page'], '/'):去除首尾的斜杠,避免出现空数组元素(比如URL结尾带斜杠的情况)
  • ??:PHP 7+支持的null合并运算符,数组下标不存在时直接返回null,无需额外判断isset

三、确保不影响其他目录的说明

该规则仅匹配以forum/开头的请求路径,且通过RewriteCond %{REQUEST_FILENAME} !-f和!-d排除了真实存在的文件和目录,因此:

  • mydomain.net/index.php及根目录下其他文件可正常访问
  • 其他子目录(如mydomain.net/blog/)只要是真实目录或文件,均不会被该规则影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:30:21