Apache-2.2

.htaccess 在遠端伺服器上工作,但在本地主機上不起作用。在 localhost 上出現 404 錯誤

  • March 14, 2013

我的問題:

當我訪問 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>

您的 app/ 和 app/webroot 目錄中有 .htaccess,但根目錄中沒有。

你應該有這個文件:/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 文件進行重寫很麻煩。

您的網站位於/home/user/public_html/site.com/public.

它包含:index.php app cake plugins vendors

你的根.htaccess文件是:

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

所以這意味著:不管它是什麼,去webroot你安裝的文件夾。

但我沒有看到任何 webroot文件夾。我錯過了什麼嗎?

引用自:https://serverfault.com/questions/345708