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

htaccess配置RewriteRule规则访问services/page路径触发404错误求助

问题根源

你的404错误是重写规则顺序错误+规则无结束符导致误匹配造成的:

  1. 现有规则顺序是模糊规则在前、精确规则在后:services/page/数字的规则放在了^services/([a-zA-Z0-9-]+)(服务详情页规则)和^services(服务列表页规则)之后,访问services/page/1时会优先匹配到前面的服务详情页规则,将page当作服务slug参数,触发[L]标记直接终止后续规则执行,根本不会走到分页规则
  2. 原服务列表页规则RewriteRule ^services services.php没有加路径结束符$,只要路径开头包含services就会被匹配,也会干扰分页路径的解析
  3. 原分页规则的正则[\d]仅能匹配单个数字,无法支持2位及以上的页码

解决方案

调整规则顺序,将更精确的规则放在前面,同时给规则补充必要的结束符、修正页码正则:
完整修改后的.htaccess代码如下:

RewriteEngine On
<IfModule mod_rewrite.c>
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^www\.elancemart\.com [NC]
    RewriteRule (.*) https://elancemart.com/$1 [L,R=301]
</IfModule>

# 最精确的规则放最前面:services分页规则
RewriteRule ^services/page/(\d+)$ /services.php?page=$1 [NC,L,QSA]
# 服务详情页规则
RewriteRule ^services/([a-zA-Z0-9-]+)$ service_details.php?slug=$1 [NC,L]
# 服务列表页规则,加$限定仅匹配/services或/services/
RewriteRule ^services/?$ services.php [NC,L]

# 其他自定义规则
RewriteRule ^category/([a-zA-Z-]+)$ category.php?catSlug=$1 [NC,L]
RewriteRule ^blog/([0-9]+)/([a-zA-Z0-9-]+)$ blog/article.php?id=$1&slug=$2 [NC,L]
RewriteRule ^verify/([a-zA-Z0-9-]+)$ verify.php?verify=$1 [NC,L]
RewriteRule ^funds/?$ add-funds.php [NC,L]
RewriteRule ^sitemap\.xml/?$ sitemap.php
RewriteRule ^article-sitemap\.xml/?$ article-sitemap.php

# 自动加.php后缀的规则放在自定义规则之后
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

ErrorDocument 404 /index.php

补充说明

所有自定义伪静态规则都建议加上路径结束符$,避免短路径规则误匹配更长的路径,同时将自动加后缀的通用规则放在所有自定义规则之后,避免通用规则提前拦截自定义路径。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:30:02