我如何只接受内部重定向并忽略所有其他请求?

时间:2011-06-19 13:34:15

标签: .htaccess redirect

我有一个WordPress部署,我想忽略对存在的资源(即文件和目录)的所有外部访问,但我想接受所有内部重定向。我们的想法是不向外部用户透露/wp*存在。我知道我必须重命名wp-content才能使用(以及调整wp-config.php中的一些内容,但最重要的是:

如何将.htaccess文件配置为仅接受内部重定向并忽略所有其他请求?

我认为%{ENV_VAR}某处可以让我创建一个RewriteCond,但是我无法在apache文档中找到它。

3 个答案:

答案 0 :(得分:1)

使外部访问成为第一条规则,并使其失败。然后执行内部重定向。

RewriteRule ^foo/?.* - [R=404,L]
RewriteRule ^bar/(.*) foo/$1 [L]

答案 1 :(得分:1)

我尝试了IVA和hakre建议的方法。他们没有按照我的努力工作。我使用它的方式类似于hakre建议的方式,但我没有定义自己的变量,而是使用已定义的变量:%{ENV:REDIRECT_STATUS}。做类似的事情:

  # If the resource requested is a `wp*` file or directory AND it's NOT from a redirect 
  # (notice that the 'match' is an empty string, poop to a 403.
  RewriteCond %{REQUEST_FILENAME} wp-.*$ [NC]
  RewriteCond %{ENV:REDIRECT_STATUS} ^$
  RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
  RewriteCond %{REQUEST_FILENAME} -d [NC]
  RewriteRule .* - [F,L]

答案 2 :(得分:0)

mod_rewrite supports environment variables。 RewriteCond的符号为%{ENV:variable},您可以使用env|E=VAR:VAL'标志在RewriteRule中设置它们。完成它,有效。

要返回一个普通的404来“隐藏”某些东西,你必须在wordpress中实现自己的处理。例如。将那些被发现为404 / File Not Found的屏蔽请求发送到worpdress中,使其返回404错误页面。

但是你必须知道你做了什么。例如。某些插件无法与您要实现的设置一起使用,因为前提条件是客户端必须能够将请求发送到/wp-content/wp-admin中的位置。

除此之外,您将无法隐藏您的网站使用wordpress运行。需要提供示例的Javascript文件。您需要将这些映射到.htaccess中的新URL以及过滤输出以进行文件的实际映射。

即使你这样做(例如通过输出缓冲区重写URL),你也会想出一个可以让你看到你正在使用wordpress的直觉。