我在 Apache 2.2 CentOS(带 cPanel)上设置了一个应用程序。我遇到了 htaccess 问题。我已确认 mod_rewrite 可以正常工作。我的 .htaccess 文件布局如下:
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
我的 webapp 文件夹基本上有一个文件 index.php ,所有 URL 请求都需要通过此文件进行引导。
我尝试了以下操作,但看来我的 .htaccess 或 httpconf 有问题:
- 从 htaccess 中删除所有内容仍然可以访问 index.php 文件(可能是查找 index.php 的默认行为)
- 我更改了索引文件的名称,以便应用程序根目录中没有名为 index 的文件 - 它引发了 403 。
- 如果我注释掉
RewriteCond %{REQUEST_FILENAME} !-d
它就会抛出 404 Deny from all
按照预期抛出 403- 使用此配置,所有其他目录(例如包含 CSS/图像等的目录)如果没有单独的 htaccess,当我尝试访问它们时都会抛出 403
可能存在的问题
- htaccess 文件
- httpd conf 中的虚拟主机/目录配置
- Apache 文件夹的用户权限问题(不太可能)
有什么方法可以找出问题所在以及如何纠正它?
编辑
我查看了服务器的错误日志,发现了以下内容:
[Thu Jan 17 07:44:45 2013] [error] [client 182.68.43.96] File does not exist: /usr/local/apache/htdocs/home
[Thu Jan 17 07:44:45 2013][error] [client 182.68.43.96] File does not exist: /usr/local/apache/htdocs/home, referer: http://IP_ADDRESS_HERE/~myapp/myapp/user
当文件位于备用目录中时,它会在 apache htdocs 中查找文件。即便如此,它也不应该在 myapp 下查找名为“user”的目录,而应该根据 htaccess 文件重定向到 index.php。我重新编写了基础,现在它在 myapp 目录下查找,但它仍然没有像每次请求时那样执行 index.php。
答案1
终于能够解决这个问题。如果您在 VPS 上托管,同时托管 cpanel 或类似的东西,而您的文件不在 apache 的 htdocs 文件夹中,则问题非常具体。
.htaccess 的最后一行应为:
RewriteRule . /~cpanel_account_name/app_folder/index.php