【发布时间】:2013-06-03 06:05:45
【问题描述】:
我的网络应用会根据输入的 URL 分配一个用户帐户。它的行为应该类似于notepad.cc,其中每个唯一的 URI 都是不同的记事本。
但是,如果用户输入了我服务器上存在的文件,我不希望用户看到该文件的内容。这似乎很简单,但我一直无法做到这一点。我知道我可以使用 mod_rewrite 来阻止对文件的访问,但是一旦我这样做了,服务器也无法访问它们。
例如,如果我有一个名为 foo 的文件,当用户输入 www.mysite.com/foo 时,我不想显示文件的内容,而是重定向到 index.html 并生成新帐户或加载帐户(如果已存在)。
如何使用 mod_rewrite 做到这一点?
编辑:我尝试按照建议使用 IP 白名单,但这也不起作用。
这是我目前所拥有的。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.html [L]
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.4$
RewriteRule ^(.+)$ index.html [L]
无论输入的 URI 是否指向现有文件,所有内容都会重定向到 index.html。但是,即使在 192.168.1.4 上测试时,也不会加载 index.html 所需的 css 和 js 文件。
【问题讨论】:
-
那么,像
www.example.com/css/style.css这样的网址也不应该被访问?最明显的答案是(1)要么没有有任何不应该在您的文档根目录中访问的东西,或者(2)过滤白名单ip(127.0.0.1,服务器自己的本地和/或公共 ip 等)。 -
@Wrikken 没错。我不希望用户可以直接访问 css/style.css。我考虑过使用IP作为过滤器。我可以试试看。
-
@Wrikken 试过了,但也没用。请查看我的编辑。
-
您有冲突的要求:"。我不希望用户可以直接访问 css/style.css" 和 "css 和 js 文件index.html 所必需的”...选择其中一个。
-
是的,我要求完成这两个任务。所以好像没有办法实现这个?
标签: apache mod-rewrite