如何配置.htaccess实现SEO友好URL重写?遇404错误求助
配置
example.com/artwork/paintingURL格式URL重写后出现404错误 想要将URL重写为example.com/artwork/paintingURL的SEO友好格式,但配置后访问重定向后的URL出现404页面未找到错误,以下是当前配置及解决方案:
当前.htaccess配置
RewriteEngine on RewriteRule ^pages/([\w-]+)/artwork/?$ painting.php?painting=$1 [QSA,NC,L] RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC] RewriteRule ^ /%1 [NC,L,R] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_URI}.php [NC,L] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^ %{REQUEST_URI}.html [NC,L]
当前页面链接方式
页面通过以下链接访问:
<a href = "painting?painting=<?=$paintingURL?>">
painting.php代码
<?php if(isset($_GET['painting'])) { include('include/conn.php'); $paintingURL = $_GET['painting']; $sql = "SELECT * FROM `paintings` WHERE `painting_URL` = '$paintingURL'"; $result = $conn->query($sql); global $paintingName; global $paintingDesc; global $paintingImg; global $pageTitle; if(mysqli_num_rows($result) > 0){ while ($row = mysqli_fetch_assoc($result)){ $paintingName = $row['painting_Name']; $pageTitle = "Site Name - ".$paintingName; $paintingDesc = $row['size_description']; $paintingImg = $row['image_ID']; } } ?>
解决方案
1. 修正.htaccess重写规则
当前规则匹配的是pages/xxx/artwork格式,与目标artwork/xxx不符,替换为以下规则(调整顺序避免冲突):
RewriteEngine on # 将旧动态URL重定向到新SEO URL(301永久重定向,利于SEO) RewriteCond %{THE_REQUEST} /painting\.php\?painting=([^\s&]+) [NC] RewriteRule ^ /artwork/%1? [R=301,L] # 将新SEO URL内部重写为实际PHP文件 RewriteRule ^artwork/([\w-]+)/?$ painting.php?painting=$1 [QSA,NC,L] # 隐藏其他PHP/HTML文件后缀 RewriteCond %{THE_REQUEST} /([^.]+)\.(php|html) [NC] RewriteRule ^ /%1 [NC,L,R=301] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_URI}.php [NC,L] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^ %{REQUEST_URI}.html [NC,L]
2. 更新页面链接格式
将生成的链接改为新的SEO友好格式:
<a href="artwork/<?=$paintingURL?>">
3. 关键检查项
- 确认服务器已启用
mod_rewrite模块 - .htaccess文件需放置在网站根目录
- 确保
paintingURL变量仅包含字母、数字、下划线或连字符(匹配正则[\w-]+),若有特殊字符需调整RewriteRule的正则表达式
内容的提问来源于stack exchange,提问作者wr87zl
相关产品推荐
相关产品推荐

