通过对语法、正则表达式和变量信息的大量研究,我能够弄清楚如何做到这一点。
为了帮助其他可能对 .htacces、重写和/或正则表达式不熟悉的人,我发布了我的解决方案以及我学到的东西。
解决我的问题的最终产品:
RewriteRule ^blog/bid/[0-9].*/(.*)$ /$2? [R=301,L,NC]
完整的 .htaccess 如下所示:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^blog/bid/[0-9].*/(.*)$ /$1? [R=301,L,NC]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
基本上我所做的就是在模式上使用一些正则表达式魔法。由于之后的数字/bid/
总是改变,使用正则表达式我可以说“匹配这个模式,不管里面有什么数字”这是使用[0-9].*
[0-9]
匹配任何编号为 0-9 的字符。.
匹配任何单个字符并*
匹配该字符的 0 个或多个实例。
下一部分是魔法发生的地方。之后的 slug (永久链接)被匹配.*
并在包装时()
被保存为变量。
然后我可以在重写的替换部分中使用该变量。$1
是表示(.*)
模式部分中的变量。如果包含更多部分,()
则可以使用$1
,$2
等来使用初始模式中保存的变量。
完成后,我设置我的标志:R=301
设置标题重定向,告诉搜索引擎内容已永久移动。L
是匹配该模式时应用的最后一条规则(即不要继续尝试匹配重写)。NC
指定大小写无关紧要。
笔记
特别注意规则的间距。没有足够或太多可能会导致您的整个网站崩溃。尤其重要的是要知道在标志部分中,逗号之间没有空格。那咬我。