具有ReWrite的VirtualDocumentRoot可防止访问目录

时间:2014-12-18 01:00:01

标签: wordpress apache .htaccess mod-rewrite virtualhost

我已经完美地运行了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,我可以直接浏览它并查看输出。

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

我出错的任何想法?

1 个答案:

答案 0 :(得分:0)

在.htaccess中,RewriteRule的^部分说,&#34;从RewriteBase处理这个&#34;在每个目录的基础上,但它不在目录规则中工作。因此,您当前的规则将相对于服务器上的/目录进行处理。

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