这个问题是针对 Apache .htaccess 文件的。
假设我网站上的真实网址是:
https://abcs.org/about-scholarships
我有这种格式(示例)的传入垃圾链接(来自其他网站):
https://abcs.org/about-scholarships95scholar
https://abcs.org/about-scholarships.happy99
https://abcs.org/about-scholarshipsFTO
https://abcs.org/about-scholarships$25.00
基本上,他们在正确的 URL 末尾添加一个随机字符串。
我需要一种方法来将 any 这些类型的错误 URL 重定向到正确的 URL。
我一直在对每个被捕获的新垃圾邮件 URL 实例反应性地使用重定向 301。
例如:
Redirect 301 /about-scholarships95scholar /about-scholarships
Redirect 301 /about-scholarships.happy99 /about-scholarships
这很好用,但每天都会为我网站的多个不同页面制作数十个。
我尝试在正确的 URL 字符串后使用通配符(在重定向 301 和 RewriteRule 中),但我不知道如何正确格式化它。
感谢您的帮助!
您可以使用
RedirectMatch
(mod_alias) 指令(与正则表达式匹配)来检查 /about-scholarships<something>
并删除 <something>
部分。例如:
RedirectMatch 301 ^(/about-scholarships). $1
.
与任何字符匹配的地方(后面跟任何东西或什么都没有)。 $1
反向引用包含前面 pattern 中带括号的子组。
但是,如果您稍后在
.htaccess
文件中通过前端控制器模式路由 URL,那么您应该使用 mod_rewrite 代替此重定向以避免冲突。例如,以下内容应该放在根.htaccess
文件的顶部(在任何前端控制器模式之前):
RewriteEngine On
RewriteRule ^(about-scholarships). /$1 [R=301,L]
注意斜杠前缀与
RedirectMatch
指令的区别。
在
.htaccess
中没有办法进一步优化这个。您需要为站点的每个页面制定单独的规则 - 如果您有很多页面,则该规则不可扩展。理想情况下,您将在您的应用程序逻辑(前端控制器)中执行此检查,您可以在其中自动执行此操作(尽管效率如何是另一回事)。
但是,如果这些只是“垃圾邮件”链接,那么您应该让它们变成 404。 (我假设他们以其他方式返回 404?)我看不出 redirecting 真的有用吗?