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
相关产品推荐
相关产品推荐

