我的网站上有一堆抓取错误,指向不存在(并且从未存在过)的网页。它是从一些为代码生成JSON-LD schema.org的错误代码创建的。基本上,我有成千上万的404,看起来像这样
http://www.domain.com/search/%7Bsearch_term%7D%2Fpage%2F2%2Fpage%2F3%2Fpage%2F6%2Fpage%2F2%2Fpage%2F3%2Fpage%2F6%2Fpage%2F6%2Fpage%2F2%2Fpage%2F2%2Fpage%2F3%2Fpage%2F2%2Fpage%2F6%2Fpage%2F3%2Fpage%2F2%2Fpage%2F6%2Fpage%2F3%2Fpage%2F2%2Fpage%2F7%2Fpage%2F2%2Fpage%2F2%2Fpage%2F8%2Fpage%2F3
http://www.domain.com/search/%7Bsearch_term%7D%2Fpage%2F2%2Fpage%2F6%2Fpage%2F2%2Fpage%2F3%2Fpage%2F6%2Fpage%2F2%2Fpage%2F6%2Fpage%2F6%2Fpage%2F6%2Fpage%2F2%2Fpage%2F3%2Fpage%2F3%2Fpage%2F3%2Fpage%2F2%2Fpage%2F2%2Fpage%2F3%2Fpage%2F7%2Fpage%2F2%2Fpage%2F7%2Fpage%2F2%2Fpage%2F8%2Fpage%2F3
我对正则表达式很糟糕,并且可以使用一些帮助来弄清楚如何解决这个问题。作为一个短期解决方案,我只想将URL请求中的/ search / {search_term} /重定向到/ search页面。
关于我应该做什么的任何提示?这就是我一直在搞乱的事情,这显然是错误的。对不起,如果这是一个非常简单的问题,但我一直在尝试在网上找到的不同的东西,并且只是打败我的头而没有成功。
RewriteRule ^/search/%7Bsearch_term%7D$ /search [R,L=301]
RewriteRule ^/search/\{search_term\}$ /search [R,L=301]
答案 0 :(得分:2)
你非常接近。您可以使用此规则:
RewriteRule ^search/\{search_term\} /search [R,L=302,NC]
或者如果search_term
也是动态字符串,则使用:
RewriteRule ^search/\{[^}]+\} /search [R,L=302,NC]
编辑:您需要在Apache或vhost配置中使用此指令:
AllowEncodedSlashes On
否则Apache会拒绝使用这些特殊字符的请求,而不会让您有机会在mod_rewrite
处理它们。
答案 1 :(得分:1)
在我的头顶,这应该做到:
RewriteRule ^search\/(.+) http://www.yourdomain.com/search [R=302]
上述语法说明:
^
表示比赛的开始
\
是转义字符,因此\/
表示转义正斜杠(可能不必要,但不会造成伤害)
()
是一个捕获组
.
表示任何字符
+
表示
所以整个正则表达式意味着:
从文件夹层次结构中的当前位置开始,匹配
<强> 搜索/ 强>
后跟一个或多个字符。
NB 重要的是,R
标志表示重定向的类型,因此您需要R=302
,而不是L=302
,而不是{{1}}存在)