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
Веб-приложения, использующие 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
.