在 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 中访问 apache vhost 时出现禁止错误