.htaccess 在遠端伺服器上工作,但在本地主機上不起作用。在 localhost 上出現 404 錯誤
我的問題:
當我訪問 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
文件夾。我錯過了什麼嗎?