0

我有下面详述的 .htaccess 文件,其中包含 HTTP_REFERER、HTTP_USER_AGENT 和 WordPress 的某些指令。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} acertainwebsite\.com [NC,OR]
RewriteCond %{HTTP_USER_AGENT} acertainwebsite.com [NC]
RewriteRule .* - [F]

RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) wordpress/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ wordpress/$2 [L]
RewriteRule . index.php [L]
</IfModule>

我正在使用 FreeBSD 的 VPS 上运行。我不确定如何测试根 .htaccess 文件中的指令 RewriteCond %{HTTP_REFERER} 和 RewriteCond %{HTTP_USER_AGENT} 是否在较低级别的子目录中强制执行。

最新版本的 Wordpress 4.1.1。使用子目录结构选项打开/启用多站点选项安装。

我怀疑某些引荐来源网址流量可能会通过根目录中的 .htaccess 文件。我在某处读到 .htaccess 文件中的指令向上级联,Apache 首先在子目录中查找,然后在父目录中,然后在父目录中查找父目录。

所以这就是问题所在。我是否必须将 .htaccess 文件放在多站点安装的每个子目录中?或者我可以在多站点安装的根目录中使用单个 .htaccess 文件吗?

如果我必须在每个多站点域子目录中都有一个 .htaccess 文件,那么在子域中放置一个空的 .htaccess 文件是否足够?这会触发向上级联以检查执行情况吗?

如果您对它的工作原理有很好的解释,或者对另一个可以更好地解释它的来源的参考,请告诉我。谢谢!!!

4

1 回答 1

0

htaccess 文件在父目录和子目录之间的工作方式实际上取决于指令。一些指令使用父 htaccess 指令,并且仅在子目录中应用这些指令的更严格的子集(如涉及权限的指令)和一些指令,子目录完全优先于父 htaccess 中的任何内容(如 mod_rewrite)。

关于 mod_rewrite 的事情是,如果子目录的 htaccess 文件中有规则,则只会执行这些规则。父 htaccess 文件中的任何规则都将被完全忽略,除非子目录包含某些变体RewriteOptions Inherit以包含父 htaccess 规则。在 Apache 2.2 中,继承规则仅意味着父规则被附加到子目录中规则的末尾,而 2.4 允许更具体地附加/前置父规则。

如果您在子目录中有应用程序,例如 wordpress,那么这些规则将生效,而您父目录中的任何规则都将被完全忽略(例如您的引用规则)。如果您希望应用这些规则,您需要做的是将这些规则复制到子目录 htaccess 文件中(在这种情况下,将它们放在任何已经存在的规则之上)。

如果您有带有 htaccess 文件的子文件夹(或没有)而没有任何重写规则,则父目录中的规则将生效。

于 2015-03-26T00:25:54.603 回答