301处理某些URL而不是htaccess中的其他URL

时间:2017-09-03 09:20:03

标签: apache .htaccess redirect mod-rewrite

您好我在301重定向上遇到.htaccess问题。

一切看起来都很好,90%的网址都没有,但不适用于任何单独的博客帖子重定向。

这是他们不重定向的代码:

RewriteRule ^blog-article.php?id=38 blog-post/xxxx-xxxxxx-xx-x-xxxxxxx/9/ [L,NC,R=301]
RewriteRule ^blog-article.php?id=34 blog-post/xxxxxxx/4/ [L,NC,R=301]

但所有其他301重写工作,他们看起来像这样:

RewriteRule ^old-url-portfolio/(.*)$ page/new-url-portfolio/$1 [L,NC,R=301]
RewriteRule ^Portfolio/Detail/(.*)$ portfolio/$1 [L,NC,R=301]

RewriteRule ^old-url/7/ page/new-url/ [L,NC,R=301]
RewriteRule ^contact-us-old/ page/contact-us-new/ [L,NC,R=301]
RewriteRule ^blog.php page/blog/ [L,NC,R=301]

我找不到他们为什么不工作,这不是因为那些不工作的是单个文件,因为blog.php文件被发送到新页面。

任何想法都将受到赞赏:)

2 个答案:

答案 0 :(得分:1)

您无法在RewriteRule模式中与查询字符串匹配。要将 blog-article.php?id = 123 重定向到不同的位置,您需要使用RewriteCond指令与%{QUERY_STRING}匹配。

RewriteCond %{QUERY_STRING} ^id=123$
RewriteRule ^blog-article.php$ /location/? [L,R]

注意:目标路径末尾的跟踪非常重要,因为它会丢弃旧的查询字符串。

答案 1 :(得分:0)

找到一个解决方法,它接缝问题是?id = number所以我只是这样做了:

RewriteCond %{QUERY_STRING} ^id=38$
RewriteRule ^blog-article\.php$ http://www.xxxxxxx.co.uk/blog-post/xxxx-xxxxxx-xxxx/9/ [R=301,L]