【问题标题】:.htaccess hiding a page with a 404 page.htaccess 隐藏带有 404 页面的页面
【发布时间】:2014-06-30 03:49:54
【问题描述】:

我的服务器上有一个或多个文件,我想暂时或永久地对用户和搜索引擎隐藏,使用.htaccess 将这些页面重定向到404 页面。这意味着任何尝试查看页面的用户或搜索引擎机器人都会看到404 页面。

以下是我添加到 .htaccess 文件中的行,用于将一些文件重定向到 404 页面,但它似乎不起作用:

RedirectMatch 404 antalya_apartment.php?bid=2&page=236
RedirectMatch 404 antalya_apartment.php?bid=3&page=129

这里是.htaccess 代码:

Options  +FollowSymLinks +Indexes +MultiViews

RewriteCond %{QUERY_STRING} (^|&)bid=2(&|$)
RewriteCond %{QUERY_STRING} (^|&)page=236(&|$)
RewriteCond %{QUERY_STRING} (^|&)bid=3(&|$)
RewriteCond %{QUERY_STRING} (^|&)page=129(&|$)
RewriteRule ^/antalya_apartment.php?$ http://turkish-property-world.com/ [L,R=404]

【问题讨论】:

  • 那么当你转到<your domain>/antalya_apartment.php?bid=3&page=129时会发生什么?
  • 奇怪或与 页面仍然显示,我得到一个 HTTP 响应标头状态:HTTP/1.1 200 OK。我所有其他 htaccess RewriteRule 工作正常。

标签: apache .htaccess mod-rewrite redirect


【解决方案1】:

由于 URL 中的查询字符串,简单的 RedirectMatch 将不起作用。试试这个,而不是使用 RewriteRuleRewriteCond

RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)bid=2(&|$)
RewriteCond %{QUERY_STRING} (^|&)page=236(&|$)
RewriteCond %{QUERY_STRING} (^|&)bid=3(&|$)
RewriteCond %{QUERY_STRING} (^|&)page=129(&|$)
RewriteRule ^/antalya_apartment.php?$ http://your.sites.domain.name.here/ [L,R=404]

请注意,我将目的地设置为 http://your.sites.domain.name.here/,因为据我所知,没有目的地就无法真正重定向。但是,如果有一种方法可以让它化为乌有——或者默认的404——而不指明我想知道的目的地。

编辑:另外,您的 Apache 是否甚至解析 .htaccess 规则? AllowOveride 是否设置为 All?查看the official Apache documentation了解更多详情。

【讨论】:

  • (^|&)bid=[23](&|$) 也会有所帮助:)
  • @hjpotter92 正确。但是,如果原始发布者不了解 Apache RewriteRule 逻辑,那么正则表达式将无法帮助他们理解这一点。一开始要保持简单。
  • 可能是原因之一,但我知道 .htaccess 工作正常,因为当我取出或添加 RewriteRule 时,.htaccess 随之而来。你认为它仍然与服务器端有关。
  • @antalya 好的,您的.htaccess 功能很好。所以我的建议是也许将我在答案中的规则示例放在文件的另一个位置。也许靠近顶部?这类规则会按特定顺序处理,因此只需询问即可。
  • @antalya 为什么您的代码中缺少RewriteEngine On?这是启用它下面的规则所必需的。
猜你喜欢
  • 2011-10-30
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 2013-12-04
  • 2018-04-07
相关资源
最近更新 更多