为啥我的 .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?

为啥这个 .htaccess 重定向不起作用?

为啥我的 .htaccess 301 重定向规则不起作用?

.htaccess 文件不重定向 http://www。到 https://www

.htaccess 如何仅将子域/文件夹重定向到子域

Laravel SSL .htaccess 重定向到 index.php