为什么我的.htaccess文件重定向到完整服务器路径而不是相对路径?

时间:2010-03-30 04:08:28

标签: apache .htaccess mod-rewrite cakephp

我以前从来没有遇到过CakePHP的问题,但是这个服务器有些奇怪,导致.htaccess文件中的重定向行为奇怪。

CakePHP使用.htaccess文件中的mod_rewrite将请求重定向到自己的webroot文件夹。问题是重定向列出了错误的路径并导致404错误。我的CakePHP应用程序存储在listing目录中,它有一个.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错误。

托管位于共享主机帐户上,因此限制了我可以对设置执行的操作。我以前从未见过这种情况,而且我认为托管方面的问题是错误的,但如果有人提出了一些有用的建议,那么我也可以把它们放到托管公司。

3 个答案:

答案 0 :(得分:3)

你的问题的解决方案可以在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文件。只需将RewriteBase /~username/添加到RewriteEngine on之后的.htaccess文件中!

答案 1 :(得分:0)

尝试从主文件中删除.htaccess ...它对我有用

答案 2 :(得分:0)

这很简单(使用uolhost共享主机):

编辑.htaccess文件:

/webroot/.htaccess

/。htaccess的

添加以下行: RewriteBase /

这是整个/webroot/.htaccess文件:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]