在 apache windows 上禁止访问包含冒号“:”的 url

Posted

技术标签:

【中文标题】在 apache windows 上禁止访问包含冒号“:”的 url【英文标题】:access forbidden on url containing colon symbol, ":", on apache windows 【发布时间】:2016-02-04 15:19:55 【问题描述】:

我无法在本地主机的 url 中打开带有“:”的 url 例如,我无法打开http://bolehnonton.dev/Halo-4:-Forward-Unto-Dawn(这是在我的本地主机中)。我浏览器中的结果页面是

禁止访问!

您无权访问请求的对象。它是 服务器读保护或不可读。

如果您认为这是服务器错误,请联系网站管理员。 错误 403 bolehnonton.dev Apache/2.4.16 (Win32) OpenSSL/1.0.1p php/5.6.12

但我可以打开与我的主机类似的网址,http://bolehnonton.com/Halo-4:-Forward-Unto-Dawn

虽然两者的htaccess文件是相似的。

这里是我的 xampp 上的虚拟主机配置

<VirtualHost *:80>
 ServerAdmin webmaster@bolehnonton.dev
   DocumentRoot "C:/xampp/htdocs/bolehnonton.com"
   ServerName bolehnonton.dev 
   <Directory C:/xampp/htdocs/bolehnonton.com>
    Allow from all
     Require all granted
        Options Indexes
  </Directory>
</VirtualHost>

【问题讨论】:

这是服务器配置问题,默认情况下大多数服务器都允许。你的 localhost 使用的是什么网络服务器? 他使用 Apache/2.4.16 (Win32) 目前有哪些规则?提供(如果有)httpd.conf(或 vhost.conf)文件。 你能在你的本地主机上打开任何其他网址吗? 请参阅此答案以获取类似问题***.com/a/10440781/5043552。看来这是 Windows 上的 apache 错误。这两个问题应该以某种方式合并:) 【参考方案1】:

它是在 2009 年声明为 WONTFIX 的 Windows 上的 Apache bug。我在 libapr-1.dll 中修复了它,srclib\apr\file_io\win32\filestat.c 中的函数 test_safe_name 为带有冒号的名称返回 ERROR_FILE_NOT_FOUND

if (*name == '?' || *name == '*')
    return APR_EPATHWILD;
else
    return (*name == ':') ? APR_FROM_OS_ERROR(ERROR_FILE_NOT_FOUND) : APR_EBADPATH; // was: APR_EBADPATH;

I could avoid recompiling Apache and patched the binary.

【讨论】:

URL 中提供的补丁不起作用。我正在开发无法更改 url 的 PHP 应用程序。该应用程序在 Linux 上运行良好,但在 Windows 环境中出现错误。【参考方案2】:

我刚刚在 URL 中遇到了与冒号相同的问题。 我正在实现分页,并且 URL 中的页数在冒号后指定。

我的情况的解决方案是将冒号替换为开发环境(我的 Windows 机器)的另一个字符,并将冒号用于生产(Linux 机器)。

也许我的故事会对某人有所帮助。

【讨论】:

以上是关于在 apache windows 上禁止访问包含冒号“:”的 url的主要内容,如果未能解决你的问题,请参考以下文章

禁止:您无权访问此服务器上的 /< - Windows

尝试在 Windows 中访问 apache vhost 时出现禁止错误

禁止在 xampp , Windows 上本地访问某些文件

无法在 Windows Server 2008 R2 上启动 Apache

Apache:您无权访问此服务器上的 /

Apache 禁止使用 Docker 访问