【问题标题】:access forbidden on url containing colon symbol, ":", on apache windows在 apache windows 上禁止访问包含冒号“:”的 url
【发布时间】: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)文件。
  • 你能在你的本地主机上打开任何其他网址吗?
  • 请参阅此答案以获取类似问题stackoverflow.com/a/10440781/5043552。看来这是 Windows 上的 apache 错误。这两个问题应该以某种方式合并:)

标签: apache .htaccess url localhost


【解决方案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 机器)。

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

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 2016-11-11
    • 2017-02-27
    • 2023-03-23
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2014-07-04
    相关资源
    最近更新 更多