突然之间,我开始为像http://example.localhost/javascript/jquery.min.js
这样的文件获得404s
早些时候一切都很好。我没有改变任何配置,至少不是手动。
但是现在如果我尝试访问/javascript
目录本身,我会在Apache错误日志中获得"Cannot serve directory /usr/share/javascript/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory index forbidden by Options directive
。
我试图在Stack Overflow上找到解决方案,但我不能。所以如果有人碰巧遇到同样的问题我就离开这里。
那么为什么它会在/ usr / share / javascript中看起来而不是我在VirtualHost中配置的内容。为了解决这个问题,我做了类似以下的事情:
$ cd /etc/apache2
$ grep -R Alias * | grep share
...
conf-enabled/javascript-common.conf:Alias /javascript /usr/share/javascript/
...
在谷歌搜索配置文件名后,我找到了some explanation。
我不知道为什么,但我安装了javascript-common包。摆脱它似乎没有害处,所以做$ sudo apt-get purge javascript-common
解决了我的问题。
使用JavaScript的Web应用程序需要通过HTTP分发它。为每个脚本使用公共路径可以避免在HTTP服务器中为每个包启用此路径。
这是创建/usr/share/javascript
别名的包,并在Apache Web服务器中启用它。
就是这样。 javascript目录不会有任何其他问题。另一个修复可能是将/usr/share/javascript/
重命名为/usr/share/javascript-common/
,然后调整javascript-common.conf
中的Alias以指向重命名的目录。我仍然不确定这是否会影响任何未来的更新。
去/etc/apache2/conf-available/javascript-common.conf
。你会发现这个:
Alias /javascript /usr/share/javascript/
<Directory "/usr/share/javascript/">
Options FollowSymLinks MultiViews
</Directory>
所以你只需要注释这些行(使用#
char)(不建议直接在conf-enabled中编辑文件)以避免禁止错误。之后,执行以下操作:
a2disconf javascript-common
a2enconf javascript-common
您不需要编辑conf文件或清除包只是禁用它。
a2disconf javascript-common
service apache2 reload
如果由于某种原因你想使用那个conf:
a2enconf javascript-common
service apache2 reload
我在Debian机器上,没有a2disconf命令。我发现/etc/apache2/conf.d
目录是/etc/javascript-common/javascript-common.conf
的链接。
我去编辑了那个文件(以root用户身份)并通过将顶行更改为更改为别名/javascript-common
而不是/javascript
Alias /javascript-common /usr/share/javascript/
并保存并重新启动Apache。
我在Ubuntu系统上遇到了类似的问题。显然,javascript-common
软件包在某个时间点被清洗,配置脚本无法正常运行。删除javascript-common
并使用apt-get重新安装无法修复它。我不得不:
dpkg --purge javascript-common
apt-get install javascript-common
而这似乎解决了这个问题。这是从Ubuntu 16.04 LTS(Trusty Tahr)升级的Ubuntu 14.04 LTS(Xenial Xerus)系统。
卸载apache2
并删除这些文件夹:
然后重新安装javascript-common
和apache2
。