【问题标题】:How can I use mod_rewrite to prevent access from clients, but not from server?如何使用 mod_rewrite 来阻止来自客户端的访问,而不是来自服务器的访问?
【发布时间】: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


【解决方案1】:

不确定我是否正确理解了您的问题,但这是否有帮助:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.4$
RewriteRule ^(.+)$ index.html [L]

RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.4$
RewriteRule ^(.+)$ index.html [L]

【讨论】:

  • 谢谢,但这不起作用。我想要做的是我不希望用户直接访问文件而是允许服务器访问它们,因为 index.html 需要使用服务器上的 css 和 js 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2018-03-04
  • 2019-05-02
  • 2012-07-23
  • 1970-01-01
  • 2019-05-04
  • 2010-09-18
相关资源
最近更新 更多