禁止访问包含冒号符号的 URL,":" ,在 Apache Windows 上



我无法在本地主机中打开url内部带有":"的url例如,我无法打开http://bolehnonton.dev/Halo-4:-前进到黎明(这在我的本地主机中)。我浏览器中的结果页面是

禁止访问!

您没有访问请求对象的权限。要么被服务器读取保护或不可读。

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

但是我可以用我的主机打开类似的url,http://bolehnonton.com/Halo-4:-前进至黎明

尽管两者的htaccess文件相似。

这是我在xamplep 上的vhost配置

<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>

这是Windows上的一个Apache错误,2009年被宣布为WONTFIX。我在libapr-1.dll中修复了它,在srclibaprfile_iowin32filestat.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;

我可以避免重新编译Apache并修补二进制文件。

我刚刚在URL中遇到了同样的冒号问题。我正在实现分页,URL中的页码是在冒号后面指定的。

对于我的情况,解决方案是在开发环境(我的windows机器)中用另一个字符替换冒号,并在生产环境(linux机器)中保留冒号。

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

最新更新