1

设想:

我有一个处理大量重写的 .htaccess 文件(我知道它在 PHP 中可能/更容易)

一切正常都 /some/fake/dir/foobar在内部重写为

/index.php?some=fake&dir=foobar

并且任何包含查询字符串的 url 都被剥离了

所以我想为任何不符合声明条件的 IP 创建一个“即将推出的页面”或“维护中的页面”

我尝试过的示例:

我尝试了这样的事情,以及其他一些变化。

# IF not from DEV address
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
# AND not for comingsoon page or other assets
RewriteCond %{THE_REQUEST} !\?comingsoon [OR]
RewriteCond %{REQUEST_URI} !^/comingsoon
# THEN send them to comingsoon page
RewriteRule ^ /comingsoon [R,L]

我已经在 .htaccess 文件的所有潜在区域进行了尝试以满足条件。

似乎问题在于获得重定向循环。apache 日志显示它请求/comingsoon页面然后重定向到根目录/。我假设是因为 to 的内部/foo/bar转换/?foo=bar。但我似乎不知道如何弄清楚/重定向到“幽灵”页面的位置/comingsoon

下面是.htaccess文件的布局:(为了节省时间理解问题省略了代码)

Options -Indexes
RewriteEngine on 

RewriteBase /

# Forced https (should not effect the problem)
[...]
# To externally redirect /dir/index.php to /dir/
[...]
# To externally redirect /dir/foo.php to /dir/foo
[...]
# To internally redirect /dir/foo to /dir/foo.php
[...]
# Prevent Rewrite on existing directories, files, and links
[...]
# Remove query string
[...]
# To internally rewrite directories as query string
[...]
# Custom error documents

如果需要完整的 .htaccess 来解决,请发表评论。谢谢!

/编辑:

请注意,我已经让它与“真实”文件一起正常工作,因为我的脚本可以防止对请求的现有文件进行重写。这不是我正在寻找的解决方案。我的主索引文件根据 request_uri 通过查询字符串重写的内容来提供动态内容

4

1 回答 1

0

好吧,我想我解决了。必须检查隐藏查询字符串的 %{THE_REQUEST} HEADERS?comingsoon

如果有人也遇到此问题,您可以查看我添加的文件或目录的白名单 :)

# IF not from DEV address
RewriteCond %{REMOTE_ADDR} !^127\.0\.5\.1$
# AND not for comingsoon page or other assets
RewriteCond %{THE_REQUEST} !^GET\s(?:/\?comingsoon|/comingsoon|/assets/|/favicon\.ico|/google[A-Za-z0-9]+\.html) [NC]
# THEN send them to comingsoon page
RewriteRule ^ /comingsoon [R,L]
于 2013-03-05T08:37:35.683 回答