如何在mod_rewrite中创建复杂条件?

时间:2011-11-28 19:46:28

标签: mod-rewrite conditional-statements

我需要拒绝除了一些IP以外的所有人访问整个网站。 此外,我需要允许每个人访问一个网站文件夹:

Options +FollowSymLinks
Options +Indexes
RewriteEngine on

# Allow access only for devs
RewriteCond %{REMOTE_ADDR} !10.10.10.10 [NC] # First dev id
RewriteCond %{REMOTE_ADDR} !11.11.11.11 [NC] # Second dev id

# Allow direct access to files
RewriteCond %{REQUEST_FILENAME} !-f

# Redirecting guests
RewriteRule (.*) /coming/soon/index.html [R=307]

# But where to place this condition?
RewriteRule ^/?preview/?$ /preview/index.html [NC]


# Other rules for main site structure
# ...

所以,我需要只为开发者加载整个网站。其他用户(访客)将看到/coming/soon/页面 此外,还允许访客查看该网站的/preview/页面。

怎么做?

1 个答案:

答案 0 :(得分:1)

如果您的/preview/重写适合所有用户并且不依赖于后续重写规则,那么最简单的方法是首先将此RewriteRule放入[L]标志,以便随后重写不会被应用。

否则,RewriteRule的例外情况可能被指定为与RewriteCond匹配的%{REQUEST_URI}

RewriteCond %{REQUEST_URI} !^/?preview/?$ [NC]

另请注意,您建议的规则会将/preview/preview/重写为/preview/index.html,并且除非执行重定向,否则这些重写中的第一个可能会破坏相对链接。