![.htaccess 在远程服务器上有效,但在本地主机上无效。在本地主机上出现 404 错误](https://linux22.com/image/571415/.htaccess%20%E5%9C%A8%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%E5%9C%A8%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%E4%B8%8A%E6%97%A0%E6%95%88%E3%80%82%E5%9C%A8%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%E4%B8%8A%E5%87%BA%E7%8E%B0%20404%20%E9%94%99%E8%AF%AF.png)
我的问题:
当我访问 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。
我在远程服务器上设置了网站,配置完全相同,运行良好。我只是在尝试在 localhost 上的笔记本电脑上运行网站时遇到了这个问题。我编辑了 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>
答案1
您的 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 文件进行重写会很麻烦。
答案2
您的站位位于/home/user/public_html/site.com/public
。
它包含了:index.php app cake plugins vendors
你的根.htaccess
文件是:
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
所以这意味着:无论它是什么,转到webroot
安装中的文件夹。
但我没看到任何 webroot
文件夹。我是不是漏掉了什么?
答案3
我没有看到任何关于日志的提及。Firebug 不是 Apache 错误日志。在这种情况下,Apache 错误日志是无可替代的,因此启动错误日志并检查 error.log
答案4
在您的笔记本电脑上,您是否在 apache 配置中设置了 AllowOverride 以允许使用 .htaccess 文件?
看: http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride
了解详情。
或者只需将以下内容添加到您的httpd.conf
并重新启动 apache:
AllowOverride All
如果有帮助,请查看上述链接并优化AllowOverride
指令。如果没有帮助,则删除AllowOverride
您添加的(但保留任何已存在的其他内容)并重新启动 apache。