.htaccess通过IP限制子域 - Wordpress Multisite

时间:2014-09-14 00:17:06

标签: regex wordpress apache .htaccess mod-rewrite

我希望将流量从Wordpress Multisite 的子域安装中重定向,除非来自特定的IP地址/范围,并且不会影响根域流量。这可能吗?

从概念上讲,我一直在想这样的事情:

# IF we're dealing with the subdomain
RewriteCond %{HTTP_HOST} subdomain\.example\.com [NC]

# AND the user is NOT from our allowed IP
RewriteCond %{REMOTE_ADDR} !111\.222\.333\.444

# THEN redirect them to the root domain
RewriteRule ^(.*)$ http://example.com/$1 [L,R=302]

换句话说,限制从不是来自定义的IP地址的所有流量访问子域。我真的只是为此学习了正则表达式和.htaccess,所以提前为任何明显错误的事情道歉。

我没有使用特定于目录的.htaccess执行此操作的原因是我正在使用Wordpress Multisite的子域安装,因此没有目录。它全部在URL中。

Wordpress本身带来的一些可能的并发症:

  1. 理想情况下,应添加这些规则,以便每次在WP中刷新永久链接缓存时都不会覆盖这些规则。
  2. 我不确定RewriteBase /评估的是什么,或者它如何影响我的文件中的URI(如果这是正确的首字母缩略词)。
  3. 编辑:

    根据@Prix反馈,这是我正在使用的完整.htaccess文件:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{HTTP_HOST} subdomain\.example\.com [NC]
    RewriteCond %{REMOTE_ADDR} !111\.222\.333\.444
    RewriteRule ^(.*)$ http://example.com/$1 [L,R=302]
    
    RewriteRule ^index\.php$ - [L]
    
    # add a trailing slash to /wp-admin
    RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
    RewriteRule ^(.*\.php)$ $1 [L]
    RewriteRule . index.php [L]
    </IfModule>
    
    # END WordPress
    

    这是Wordpress&#39;多站点默认规则,在RewriteBase /之后立即包含我自己的添加项。我收录了@ hjpotter92的建议。

    所需的影响是将所有流量从subdomain.example.com重定向到example.com,,除非来自特定的IP地址。这适用于主要使用部分Wordpress Multisite作为公司外联网的客户。

1 个答案:

答案 0 :(得分:1)

规则看起来很好是,我唯一要改变的是:

RewriteRule ^(.*)$ http://example.com/$1 [L,R=302]

进入这个

RewriteRule ^ http://example.com/ [L,R=302] 

由于您不希望在重定向上使用404,因为子域共享相同的DocumentRoot,然后是的,它应该可以正常运行,因为我自己测试了它。

我希望在这一行:

RewriteCond %{HTTP_HOST} subdomain\.example\.com [NC] 

您不会像http://或除合格域名之外的任何内容添加噪音,例如intranet\.mydomainname\.com没有斜线,没有http等。