.htaccess重写SEO友好URL至带参数URL问题求助
问题解决方案
规则位置问题
你的自定义重写规则位置不正确,必须放在WordPress核心重写规则之前(也就是RewriteBase /及后续WordPress规则的前面),否则会被WordPress的默认规则拦截,无法触发自定义重定向。
完整修正后的.htaccess配置
<IfModule mod_rewrite.c> RewriteEngine On # 匹配带/不带末尾斜杠的供应商URL,捕获标识并初步重定向 RewriteRule ^supplier/([^/]+)/?$ /suppliers?ID=$1 [R=302,L] # 循环替换ID中的连字符为空格,直到所有连字符处理完成 RewriteCond %{QUERY_STRING} ^ID=([^&-]+)-([^&]+)$ RewriteRule ^suppliers$ /suppliers?ID=%1 %2 [R=302,N] # 以下为WordPress核心规则,请勿修改 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
规则说明
- 末尾斜杠处理:
^supplier/([^/]+)/?$同时匹配两种URL格式:supplier/my-supplier-number-one和supplier/my-supplier-number-one/,捕获组$1会自动忽略末尾的斜杠,得到干净的my-supplier-number-one。 - 连字符替换:通过
RewriteCond检查查询字符串中是否还有连字符,配合RewriteRule将连字符替换为空格,N标志会让mod_rewrite重复处理这个URL,直到所有连字符都被替换成空格。 - 临时重定向测试:先使用
R=302(临时重定向)测试,避免浏览器缓存错误的重定向规则,确认生效后再改为R=301(永久重定向)。 - 目标URL修正:你的原始规则中目标URL写错为
/supplier,已修正为需求中的/suppliers(复数形式)。
内容的提问来源于stack exchange,提问作者user2774053
相关产品推荐
相关产品推荐

