【问题标题】:VirtualDocumentRoot with ReWrite to prevent access to directories带有 ReWrite 的 VirtualDocumentRoot 以防止访问目录
【发布时间】:2015-02-16 16:59:24
【问题描述】:

我的 VirtualDocumentRoot 工作正常,但我想阻止通过 VirtualHost 指令访问每个文档根目录中的特定文件夹,因此我不需要每个文档根目录中的 .htaccess 文件,但我可以'似乎没有得到阻止工作。 (虚拟主机完美运行,但我可以通过浏览器直接访问 wp-includes,我应该无法访问。

这是我所拥有的:

<VirtualHost 127.0.0.1:80>
  UseCanonicalName Off
  ServerName default
  ServerAlias *
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
  RewriteRule ^/(.*)$ "/Users/me/My Sites/%2/wordpress/$1"
  VirtualDocumentRoot "/Users/me/My Sites/%0/wordpress"
  <Directory "/Users/me/My Sites/*/wordpress">
    RewriteEngine On
    RewriteRule ^wp-admin/includes/ - [F,L]
    RewriteRule !^wp-includes/ - [S=3]
    RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
    RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
    RewriteRule ^wp-includes/theme-compat/ - [F,L]
    Options -Indexes +FollowSymLinks +Includes
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

浏览到 domain.com/wp-includes 应该提供一个禁止页面,但我创建了目录并在其中放置了一个 index.php,我可以直接浏览到它并查看输出。

如果我将重写(从目录)放入 wordpress 目录中的 .htaccess 文件中,它可以正常工作。但是一旦我把它放入目录...bupkis。

有什么想法我哪里出错了吗?

【问题讨论】:

    标签: wordpress apache .htaccess mod-rewrite virtualhost


    【解决方案1】:

    在 .htaccess 中,RewriteRule 的 ^ 部分表示,“从 RewriteBase 处理这个”基于每个目录,但它在目录规则中不起作用。因此,您当前的规则将相对于您服务器上的 / 目录进行处理。

    为了您在 WordPress 中的目的,请删除每个插入符号之前的插入符号。这将处理与规则匹配的任何目录/文件的 RewriteRules,这应该不是问题,因为 WordPress 核心应该是唯一一个创建和使用 wp-admin 和 wp-includes 作为目录的目录,并且您总是希望这些目录被阻止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-18
      • 2011-01-21
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多