2011-10-25 62 views
2

这是CakePHP的上下文,但我确定它在其他应用程序中很常见。我实现这个页上的说明:.htaccess:多个.htaccess文件如何工作?

http://book.cakephp.org/view/917/Apache-and-mod_rewrite-and-htaccess

答:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

B:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ webroot/ [L] 
    RewriteRule (.*) webroot/$1 [L] 
</IfModule> 

C:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

在第3,有3 .htaccess文件。为了简单起见,我们称它们为A,B和C.虽然它似乎在我的服务器(localhost XAMPP)上工作,但我不确定是否理解重定向的路径。无论我输入什么地址,它都会按照它的设置始终进入localhost \ cake \ users \ login。

我的应用程序的根目录所在的位置是\ cake。我有\蛋糕,\蛋糕\应用程序和蛋糕\应用程序\ webroot分别与A,B和C,在他们。按照上面的说明,cake \ app中的代码运行,这正是我想要的。在像上面那样正确设置.htaccess文件之前,\ cake中的代码正在运行;这是不正确的,因为它告诉我我的数据库没有设置,你没有这个文件,等等。

有人可以帮助我和“路径”这个应用程序正在之前运行任何PHP文件?是否将所有内容重定向到cake \ app \ webroot,然后重定向到超出.htaccess文件的位置? (在这种情况下,以cake \ users \ login)

谢谢你的帮助!

PS:我很惭愧地说,我还没弄清楚哪个文件的哪一部分重定向到用户登录页面的所有HTTP请求。我刚刚设置了这个,我刚刚回来了。我想我正在CakePHP Cookbook页面上的第二个教程中添加一个ACL功能..

+0

简单的跟踪方法:为每个重写添加一个额外的查询参数:'RewriteRule ...?url = $ 1&from = fileC' –

+0

Marc,是“...”应该是别的吗? – musicliftsme

+0

是的,这是你的重写url的其余部分。只是因为没有削减粘贴整个事情而懒惰。重要的是添加'&from = fileC'查询参数。 –

回答

1

有人可以帮助我解决这个应用程序在运行任何php文件之前所使用的“路径”吗?是否将所有内容重定向到cake \ app \ webroot,然后重定向到超出.htaccess文件的位置? (在这种情况下,以cake \ users \ login)

总之,是的。只有一个.htaccess文件在做real工作,那就是“C”(这是/app/webroot/.htaccess的文件)。这将任何不是针对现有文件或目录的请求传递到引导CakePHP并处理请求的index.php。任何进一步的“重定向”由CakePHP's routing处理。

编辑: 解决您在什么重定向到登录页面的问题,机会是你已经配置了Auth component,并没有通过$this->Auth->allow()设置任何“公共”的网页。


另外两个是存在的情况下,你把CakePHP安装目录或应用程序目录到文件夹中所使用的Apache服务的网页,例如/var/www/html或类似的。你会注意到,该结构是:

/cakephp-1.3.x/.htaccess ( “A”)

/cakephp-1.3.x/app/.htaccess (“B “)

/cakephp-1.3.x/app/webroot/.htaccess (” C“)

所以,在任何这些水平将最终的任何请求由所述再处理writeRule在“C”中。这样做是为了保护敏感数据,例如您的数据库连接信息,并确保应用程序正常运行(因为所有请求都应该通过CakePHP引导程序,除非您已设置自定义路由)。

+0

非常感谢贾斯汀!你是对的。我在cake \ app \ app_controller.php中找到Auth组件,并且BeforeFilter与登录页面一起工作。我赞赏清楚的解释。这听起来很合理。 – musicliftsme

1

以下行将所有内容重定向到您的索引页面,这是一个Cake构造。

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

就你而言,我认为你的重定向不是直接导致你的.htaccess文件。您的webroot htaccess只需将所有内容都管理到您的索引页面。

但是,您应该考虑检查您的索引页。该页面的控制器可能具有传入参数的默认子句。因此,如果您输入一个未知参数的网址,您的索引页面将只显示一个登录屏幕。

这是我的两美分。但是,我只和CakePHP一起做过实验,所以如果我错了,那么有更多经验的人应该随时纠正我。

+0

感谢您输入lunchmeat317。当我没有像上面这样的htaccess安装程序时,我去了localhost/cake,它正在从没有配置文件设置的\ cake目录中读取文件。例如当cake \ app \ database.php中正确的一个出现时,它看上去像是cake \ database.php。我发现cake \ app \ webroot \ index.php文件是每个请求都被重定向到当前的A,B和C设置。 – musicliftsme

+0

嗯,我会更多的关注这个index.php文件。我不认为我已经修改了它(从下载中使用它)。 – musicliftsme

1

我认为这是由于在你的应用程序中使用了Auth组件而发生的。你写到你正在尝试使用Auth组件的CakePHP的Acl组件部分。在请求控制器中包含Auth组件的情况下,如果没有指定其他腰部方法,cakephp会默认重定向到/ users/login。所以我猜htaccess不会在这里造成问题。

+0

你是对的Auth组件!谢谢! – musicliftsme