我在使用 .htaccess 指令时遇到了困难。我正在尝试对 Codeigniter 框架进行 URL 重写。
生产服务器上的一切都按预期运行,但我无法正确设置自己的测试服务器。
测试服务器
URL 重写效果很好,php 文件按预期呈现,但通过 HTML 包含的所有文件(css、js、img)均未显示,因为它们无法访问,原因如下:
403 Forbidden
You don't have permission to access /path/to/file/plugins-min.css
on this server.
这是我的.htaccess 文件:
RewriteEngine On
# Do not enable rewriting for files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# For requests that are not actual files or directories,
# Rewrite to index.php/URL
RewriteRule ^(.*)$ index.php/$1 [PT,L]
这是我的文档文件夹的 Apache2 配置:
<Directory /document/folder/>
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
AllowOverride All
Order deny,allow
Allow from all
</Directory>
当我设置AllowOverride
为None
(即不重写 URL)时,静态文件就会正确显示。
当通过脚本上传图像时,即使它们具有与其他不可访问的文件相同的权限/所有者/组,它们也会显示在页面上。
网站上的所有内容都具有相同的权限和所有者。
我认为我的 Apache 配置有一些东西阻止了'包含 HTML' 文件无法访问,正如 Apache 错误日志所述:
[Wed Aug 17 22:29:24 2011] [error] [client <MY IP>] client denied by server
configuration: /var/www/site.com/application/assets/js/admin.js,
referer: http://<MY IP>/site.com/page/edit/
提前致谢
答案1
使用 AllowOverride All 查找您正在工作的其他目录中影响您配置的 .htaccess 文件时,这种情况非常常见。根据评论主题发布此答案以收集赏金。以下是 find 命令的示例:
寻找文档根目录-名称.htacccess-打印
将打印任何其他.htaccess 文件。
答案2
使用以下命令查找所有.htaccess
文件:
find /var/www/ -name .htaccess
暂时改变:
Order deny,allow
Allow from all
到:
Order allow,deny
Allow from all
以确保之前没有Deny
处理过的规则。
答案3
在 Apache 配置部分内添加以下规则:
Allow from 127.0.0.1
Allow from localhost