为啥我的 .htaccess 文件重定向到完整的服务器路径而不是相对路径?
Posted
技术标签:
【中文标题】为啥我的 .htaccess 文件重定向到完整的服务器路径而不是相对路径?【英文标题】:Why is my .htaccess file redirecting to full server path instead of relative path?为什么我的 .htaccess 文件重定向到完整的服务器路径而不是相对路径? 【发布时间】:2011-02-02 07:46:30 【问题描述】:我以前从未遇到过 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 错误。
主机位于共享主机帐户上,因此限制了我可以使用这些设置进行的操作。我以前从未见过这种情况,我认为这是托管方面的问题,但如果有人有一些有用的建议,我也可以将它们提交给托管公司。
【问题讨论】:
我想这与封闭的主目录有关,这是核心 httpd.conf 中的一个设置,因为我很确定 ~username 格式是一个符号链接 【参考方案1】:您的问题的解决方案可以在 cakephp 书中page 的底部找到:
对于许多托管服务(GoDaddy,1and1),您的 Web 服务器实际上是从已经使用 mod_rewrite 的用户目录提供服务的。如果您将 CakePHP 安装到用户目录 (http://example.com/~username/cakephp/) 或任何其他已经使用 mod_rewrite 的 URL 结构中,您需要将 RewriteBase 语句添加到 CakePHP 使用的 .htaccess 文件(/.htaccess、/app/.htaccess , /app/webroot/.htaccess)。
我也从我的个人资料的 public_html 文件夹中部署了 CakePHP。我不得不更改上面提到的 3 个相同的 .htaccess 文件。只需在 RewriteEngine on
之后的 .htaccess 文件中添加 RewriteBase /~username/
!
【讨论】:
【参考方案2】:尝试从主文件中删除 .htaccess... 它对我有用
【讨论】:
这是一种非常具有破坏性的解决问题的方法。【参考方案3】:这很简单(使用 uolhost 共享主机):
编辑两个 .htaccess 文件:
/webroot/.htaccess
/.htaccess
添加以下行: 重写基础/
这是整个 /webroot/.htaccess 文件:
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]
【讨论】:
以上是关于为啥我的 .htaccess 文件重定向到完整的服务器路径而不是相对路径?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 .htaccess 仅针对 https / ssl 不将 uri 路径重定向到 index.php?