我已经在我的htaccess文件中设置了RewriteRules来将我的php URL重写为SEO友好的.htm URL。现在我必须设置301 Redirect来将php URL指向新的htm URL,但是找不到解决方案。正如你可能猜到的,我不熟悉重写/重定向规则:(在我的htaccess中,我对accessory.php和accessory-details.php文件都有这样的规则,它工作得很完美。
RewriteRule accessories-(.*)\.htm$ accessories.php?lang=$1
RewriteRule accessory-details-id-(.*)-(.*)\.htm$ accessory-details.php?id=$1&lang=$2
问题是我仍然可以访问php的网址。php的网址有很好的排名,所以我需要这个301重定向为SEO的目的。我如何做重写和301重定向?注意,一些文件有一个和其他文件有两个GET参数。我不能设置一个工作代码自己,这让我生气。这只是两个例子,有很多类似的“对”的文件在我的根,但是我想如果我能让这两个文件工作的话,我可以设法使代码适应其他文件。
1条答案
按热度按时间6pp0gazn1#
'id'参数是一个整数- 1 2,3,...,'lang'参数是一个字符串-“en”或“fr”。例如:'accessory-details.php?id=6&lang=en'(带参数的旧URL)和'accessory-details-id-6-en.htm' //新的SEO友好URL
您现有的正则表达式(子模式)太过通用。
.*
匹配任何内容(包括用作分隔符的连字符),因此导致正则表达式相当模糊。正则表达式应尽可能具体,以确保您不会不必要地重写(和 * 处理 *)从一开始就无效的URL。假设您的
.htaccess
文件和其他文件位于文档根目录中,请尝试执行以下操作:END
标志(Apache 2.4)确保在重写URL后不会发生进一步的处理-因此重写的URL不会被重定向(在处理的第二阶段,L
(last
)标志会发生这种情况)。这些指令还假设您的URL不包含其他URL参数,除了所述的
id
和lang
。并且始终按照所述的顺序。即id=123&lang=aa
,而不是lang=aa&id=123
。%1
和%2
反向引用包含从前面的 CondPattern 中捕获的值。外部重定向上的
QSD
(查询字符串丢弃)标志对于从重定向响应中丢弃原始查询字符串是必需的。注意:首先测试302(临时)重定向以避免潜在的缓存问题。在测试之前,您可能需要清除浏览器缓存。