Apache не обслуживает файлы в каталоге "javascript". Зачем?

Внезапно я начал получать 404s для файлов типа http://example.localhost/javascript/jquery.min.js

Раньше все работало нормально. Я не изменял никаких конфигураций, по крайней мере, не вручную.

Но теперь, если я попытаюсь получить доступ к самому каталогу /javascript, я бы получил "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 в журнале ошибок Apache.

Ответ 1

Я пытался найти решение этого в Stack Overflow, но я не мог. Поэтому я просто оставляю это здесь, если кто-то сталкивается с той же проблемой.

Так почему, черт возьми, он будет выглядеть в /usr/share/javascript вместо того, что я настроил в VirtualHost. Чтобы понять это, я сделал что-то вроде следующего:

$ cd /etc/apache2
$ grep -R Alias * | grep share

...
conf-enabled/javascript-common.conf:Alias /javascript /usr/share/javascript/
...

После поиска по этому имени конфигурационного файла я нашел несколько объяснений.

Я не знаю почему, но у меня установлен javascript-common. Не кажется вредным избавиться от него, поэтому $ sudo apt-get purge javascript-common решил проблему для меня.

Ответ 2

issue:

Веб-приложения, использующие JavaScript, должны распространять его через HTTP. Использование общего пути для каждого script позволяет избежать необходимости включения этот путь на HTTP-сервере для каждого пакета.

Это пакет, который создает псевдоним /usr/share/javascript и включает его на веб-сервере Apache.

Рекомендуемое исправление

И что это. У вас не будет проблем с javascript-каталогами. Другое исправление может состоять в том, чтобы переименовать /usr/share/javascript/ в /usr/share/javascript-common/, а затем настроить псевдоним в javascript-common.conf, чтобы указать на переименованный каталог. Я все еще не уверен, повлияет ли это на какое-либо будущее обновление.

Другое исправление:

Перейдите к /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

Ответ 3

Вам не нужно редактировать файл conf или очищать пакет, просто отключив его.

a2disconf javascript-common
service apache2 reload

Если по какой-то причине вы хотите использовать этот conf:

a2enconf javascript-common
service apache2 reload

Ответ 4

Я нахожусь на Debian машине, и нет команды a2disconf. Я нашел, что каталог /etc/apache2/conf.d - это ссылка на /etc/javascript-common/javascript-common.conf.

Я пошел и отредактировал этот файл (с правами root) и изменил его на псевдоним /javascript-common вместо /javascript, изменив верхнюю строку на

Alias /javascript-common /usr/share/javascript/

и сохранить его и перезапустить Apache.

Ответ 5

У меня была аналогичная проблема в системе Ubuntu. По-видимому, пакет javascript-common был закрыт в какой-то момент времени, а configure script работал неправильно. Удаление javascript-common и переустановка с помощью apt-get не исправит его. Мне пришлось:

dpkg --purge javascript-common

apt-get install javascript-common

И это, казалось, исправить проблему. Это Ubuntu 16.04 Система LTS (Xenial Xerus), которая была обновлена ​​с Ubuntu 14.04 LTS (Trusty Tahr).

Ответ 6

Удалите apache2 и удалите следующие папки:

  • rm -R/var/www/html/
  • rm -R/etc/apache2

Затем переустановите javascript-common и apache2.