为什么我的 .htaccess 文件重定向到完整服务器路径而不是相对路径?
-
23-09-2019 - |
题
我以前从未遇到过 cakePHP 的问题,但该服务器有些奇怪,导致 .htaccess 文件中的重定向行为异常。
CakePHP 在 .htaccess 文件中使用 mod_rewrite 将请求重定向到其自己的 webroot 文件夹。问题在于重定向列出了错误的路径并导致 404 错误。我的 CakePHP 应用程序存储在列表目录中,有一个 .htaccess 文件,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [R=301,L]
RewriteRule (.*) app/webroot/$1 [R=301,L]
</IfModule>
(*请注意,R=301 会导致外部重定向,因此我们可以从我们的一端看到发生了什么。它确实应该省略这个标志并在内部进行重定向,对最终用户透明)
这应该重定向来自的任何请求 http://hostname.com/~username/listings/
到 http://hostname.com/~username/listings/app/webroot/
然而,不是简单地添加“app/webroot/
”按照预期,它添加了完整的服务器路径( /home/username/public_html/listings/app/webroot/
) 得到最终的 URL http://hostname.com/home/username/public_html/listings/app/webroot/
这显然是不正确的并会触发 404 错误。
托管位于共享托管帐户上,因此限制了我可以对设置执行的操作。我以前从未见过这种情况发生,我认为这是托管方面的问题,但如果有人有一些有用的建议,那么我也可以将它们提交给托管公司。
解决方案
您的问题的解决方案可以在本文底部找到 页 在 cakephp 书中:
对于许多托管服务(GoDaddy、1and1),您的 Web 服务器实际上是从已经使用 mod_rewrite 的用户目录提供服务的。如果您将 CakePHP 安装到用户目录中 (http://example.com/~用户名/cakephp/),或任何其他已使用 mod_rewrite 的 URL 结构,您需要将 RewriteBase 语句添加到 CakePHP 使用的 .htaccess 文件(/.htaccess、/app/.htaccess、/app/webroot/.htaccess)。
我也从我的个人资料的 public_html 文件夹中部署了 CakePHP。我必须更改上面提到的 3 个相同的 .htaccess 文件。只需添加 RewriteBase /~username/
到之后的 .htaccess 文件 RewriteEngine on
!
其他提示
尝试从主文件中删除的.htaccess ...它为我
这是相当简单的(使用uolhost共享主机):
编辑两个.htaccess文件:
/webroot/.htaccess
/。htaccess的
添加以下行: RewriteBase /
下面是整个/webroot/.htaccess文件:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]