使用.htaccess到410包含问号的任何通配符URL

时间:2015-10-20 22:23:37

标签: .htaccess

我已经查看并搜索过,并且还没有找到这个问题的答案 - 我认为这应该很简单,但我不确定。

基本上,我很想学习如何使用.htaccss到410(Gone)我网站上包含问号的任何网址。

例如

这样的网址我希望有一个410

mysite.com/content/page.htm?no_redirect=true

但请保留原始网址 mysite.com/content/page.htm

当我在5月创建我的网站的移动版本时,编码问题会产生很多带有通配符/问号的页面,而且我想告诉google那些已经没有了.htaccess。

感谢您的帮助 - 这里有很棒的网站和资源!

1 个答案:

答案 0 :(得分:0)

对于包含?的所有网址,您实际上要求任何带有非空查询字符串的网址与Apache的%{QUERY_STRING}变量匹配。您可以使用RewriteCond将任何字符与.匹配以表明它是非空的,然后使用RewriteRule发送410代码。

您可能希望将其与an ErrorDocument directive结合使用,以提供410代码附带的错误页面。

# Make sure an error page is defined for 410
ErrorDocument 410 /path/to/custom/410.html

# For any non-empty query string
RewriteCond %{QUERY_STRING} ^.
# Match any path and send a 410 response
# The [L] prevents further matches from being executed
RewriteRule ^ - [R=410,L]

评论后的附录:

要仅将410应用于包含no_redirect=true参数的网址,您可以将其用作RewriteCond中的表达式。由于%{QUERY_STRING}包含整个查询字符串(?除外),因此只需使用整个key=value对。

RewriteCond %{QUERY_STRING} no_redirect=true [NC]
RewriteRule ^ - [R=410,L]

注意我还添加了[NC](无案例)以使其不区分大小写。