将所有请求重定向到子目录,除了几个IP地址

时间:2012-07-29 20:27:52

标签: .htaccess url redirect

这个问题试图将从以前的一些答案中获得的知识与SO结合起来,所以除非答案符合要给出的所有标准,否则不要标记为重复。

这就是我想要做的事:
我需要暂时.htaccess将访问我的网站的访问者重定向到克隆副本,以便我可以在现有网站上进行修改。
因此,我有以下需求:
     1.所有用户请求/(.*)应重定向到子目录/网站/ $ 1(即如果有人请求/index.php它应该转到/website/index.php)
     2.如果用户来自三个特定的ips中的一个,则不应该重定向请求,并且应该转到该文件(即,如果我请求/index.php,它应该转到/index.php)
     3.所述重定向还应强制使用www(即带或不带www的请求,应重定向到www.example.com/website)
     4.所述重定向应该是某种类型的临时重定向(正常站点只会停机几天)

这是我目前的代码:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "http\:\/\/www\.example\.com\/website\/" [R=301,L]

符合标准1,3和4.我只需要帮助调整它以不重定向三个特定的IP地址。

有关如何纳入#2的任何想法?

1 个答案:

答案 0 :(得分:2)

怎么样:

RewriteEngine On

# for #2
RewriteCond %{REMOTE_ADDR} !123\.45\.67\.89$
RewriteCond %{REMOTE_ADDR} !123\.45\.67\.90$

# for #1 and #3 and #4
RewriteCond %{REQUEST_URI} !^/website/ [NC]
RewriteRule ^(.*)$ http://www.example.com/website/$1 [R=302,L]

对于#2,您希望将123\.45\.67\.89等替换为您不希望重定向的IP地址。

对于#4,R=301需要更改为R=302