蛋糕:使用相对网址

时间:2011-02-16 19:05:17

标签: url cakephp

我的登录重定向是使用绝对URL构建的,但我需要使用相对URL,因为我的cakephp应用程序是通过代理服务器提供的。

Router类具有影响url方法行为的属性(文档链接: http://api.cakephp.org/class/router#method-Routerurl

我认为我想要做的是将'base'属性设置为false,但我不确定如何做到这一点。我只是指定

$this->base = false;

某处? (我尝试在控制器中的beforeFilter中执行此操作,但它没有效果。)

更新:嗯,这不是理想的解决方案,但我可以通过将此行添加到paths.php来获取通过代理服务器工作的链接: 定义( 'FULL_BASE_URL',的 'http://www.myexternaldomain.com');

然后我还必须在core.php中将安全级别设置为低。

但是这意味着我在本地访问蛋糕页面 http://localhostname/cake/users

我会被重定向到外部网址,这不是我想要的。

更新:

以下是我的开发服务器的print_r($ _ SERVER)的输出:

数组([REDIRECT_REDIRECT_STATUS] => 200 [REDIRECT_STATUS] => 200 [HTTP_HOST] => devdataload [HTTP_USER_AGENT] => Mozilla / 5.0(X11; U; Linux x86_64; en-US; rv:1.9 .2.11)Gecko / 20101028 CentOS / 3.6-2.el5.centos Firefox / 3.6.11 [HTTP_ACCEPT] => text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8 [HTTP_ACCEPT_LANGUAGE] => en-us,en; q = 0.5 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8; q = 0.7, *; q = 0.7 [HTTP_KEEP_ALIVE] => 115 [HTTP_CONNECTION] => keep-alive [HTTP_REFERER] => http://devdataload/cakepf/users/login [HTTP_COOKIE] => CAKEPHP = ndhjfch0c1oq285ks4d2dfib90; ZDEDebuggerPresent = php,phtml,php3 [ PATH] => / usr / bin:/ bin [SERVER_SIGNATURE] => 位于devdataload端口80的Apache / 2.2.8(CentOS)服务器 [SERVER_SOFTWARE] => Apache / 2.2.8(CentOS)[SERVER_NAME] => devdataload [SERVER_ADDR] => 5.213.249.197 [SERVER_PORT] => 80 [REMOTE_ADDR] => 5.213.249.197 [DOCUMENT_ROOT] => / var / www / html [SERVER_ADMIN] => root @ localhost [SCRIPT_FILENAME] => /var/www/html/cakepf/app/webroot/index.php [REMOTE_PORT] => 39979 [REDIRECT_QUERY_STRING] => url = alerts [REDIRECT_URL] => / cakepf / app / webroot / alerts [GATEWAY_INTERFACE] => CGI / 1.1 [SERVER_PROTOCOL] => HTTP / 1.1 [REQUEST_METHOD] =>获取[QUERY_STRING] => url = alerts [REQUEST_URI] => / cakepf / alerts [SCRIPT_NAME] => /cakepf/app/webroot/index.php [PHP_SELF] => /cakepf/app/webroot/index.php [REQUEST_TIME] => 1299347553

2 个答案:

答案 0 :(得分:3)

只要您不对其进行硬编码,Cake就可以正常处理相对和绝对网址。
在指定URL时,您应该始终根据目标控制器和操作执行此操作,并让Cake找出实际的URL。

array('controller' => 'foos', 'action' => 'bar')将动态转换为/foo/bar/project/cake/foo/bar或其他任何合适的内容。如果您需要绝对URL,请将适当的参数设置为true

Router::url(array('controller' => 'foos', 'action' => 'bar'), true)
→ http://example.com/foos/bar

答案 1 :(得分:0)

这个解决方案并不理想,但至少它是有用的。在我的生产系统中,我将此行添加到paths.php

define('FULL_BASE_URL','http://<proxy server name>');

这可确保所有网址都通过代理服务器。

dev/test我只在本地工作的地方,我对该行进行评论。