Назад | Перейти на главную страницу

.htaccess работает на удаленном сервере, но не работает на localhost. Получение 404 ошибки на localhost

МОЯ ПРОБЛЕМА:

Когда я захожу на localhost, сайт не работает. Он показывает некоторый текст с сайта, но кажется, что сервер не может найти другие файлы. Вот фрагмент ошибок от firebug:

"NetworkError: 404 Not Found - localhost/css/popup.css"
"NetworkError: 404 Not Found - localhost/css/style.css"
"NetworkError: 404 Not Found - localhost/css/player.css"
"NetworkError: 404 Not Found - localhost/css/ui-lightness/jquery-ui-1.8.11.custom.css"
"NetworkError: 404 Not Found - localhost/js/jquery.js"

Кажется, мой сервер ищет файлы не в том месте. Например, localhost / css / popup.css на самом деле находится по адресу localhost / app / webroot / css / popup.css.

Мой сайт настроен на удаленном сервере с такими же точными конфигурациями, и он отлично работает. У меня просто возникла эта проблема при попытке запустить сайт на моем ноутбуке на локальном хосте. Я отредактировал свой файл VirtualHosts DocumentRoot и в /home/user/public_html/site.com/public/app/webroot/, и это уменьшило количество ошибок, но я чувствую, что это неправильно, и вроде как взломал его, так как я не использовал эти настройки на моем производственном сервере, который работает.

Последнее, что я хочу сделать, это то, что на веб-сайте используются динамические URL-адреса. Я не знаю, связано ли это с этим. Например, на производственном сервере URL-адреса: site.com/#hello/12321.

ЗДЕСЬ, С ЧЕМ Я РАБОТАЮ:

На моем ноутбуке установлен сервер LAMP, работающий под управлением Ubuntu 11.10.

Я включил mod_rewrite:

sudo a2enmod rewrite

Затем я отредактировал свой файл виртуальных хостов:

<VirtualHost *:80>
  ServerName  localhost
  DirectoryIndex index.php
  DocumentRoot /home/user/public_html/site.com/public

    <Directory /home/user/public_html/site.com/public/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>
</VirtualHost>

Затем перезапустил apache. На моем веб-сайте используется cakePHP. Это структура каталогов веб-сайта: "/home/user/public_html/site.com/public" содержит:

index.php app cake plugins vendors

Это мои файлы .htaccess:

/home/user/public_html/site.com/public/app/.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
 </IfModule>

/home/user/public_html/site.com/public/app/webroot/.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

Ваш сайт находится под /home/user/public_html/site.com/public.

Это содержит: index.php app cake plugins vendors

И ваш корень .htaccess файл:

RewriteRule    ^$    webroot/    [L]
RewriteRule    (.*) webroot/$1    [L]

Итак, это означает: что бы это ни было, перейдите в webroot папку в вашей установке.

Но я не вижу webroot папка. Я что-то упускаю?

У вас есть .htaccess в каталогах app / и app / webroot, но ничего в корневом каталоге.

У вас должен быть файл: /home/user/public_html/site.com/public/.htaccess

RewriteRule    ^$    app/webroot/    [L]
RewriteRule    (.*) app/webroot/$1    [L]

ИЛИ

Измените свой docroot на

DocumentRoot /home/user/public_html/site.com/public/app/

Оба эти ответа предполагают, что public / index.php не использует какую-то расширенную маршрутизацию для URI. Однако перезаписывать вложенные файлы .htaccess - это беспорядок.

На вашем ноутбуке есть ли у вас параметр AllowOverride, установленный в конфигурации apache, чтобы разрешить использование файлов .htaccess?

Видеть: http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride

Подробности.

Или просто добавьте следующее в свой httpd.conf и перезапустите apache:

AllowOverride All

Если это поможет, то просмотрите ссылку выше и уточните AllowOverride директива. Если не поможет, выньте AllowOverride вы добавили (но оставьте все, что уже было) и перезапустите apache.

Я не вижу упоминания о логах. Firebug - это не журналы ошибок Apache. В этом случае нет замены журналам ошибок Apache, поэтому запустите журнал ошибок и проверьте error.log

http://httpd.apache.org/docs/2.2/logs.html#errorlog