php 后台转发和重定向的区别及kohana框架当前url加参数方式

1、重定向是浏览器行为,浏览器地址有变化;转发是后台服务器完成, url地址不变化。

2、kohana获取URL

当前url是http://soyoung.kohana.com/blog/add?id=3

var_dump(Url::site(‘blog/add‘, NULL, FALSE) );               打印string ‘/blog/add‘ (length=9)

var_dump(URL::query());                                                    打印string ‘?id=3‘ (length=5)

E:\html\kohana\modules\pagination\classes\kohana\pagination.php

	public function url($page = 1)
	{
		// Clean the page number
		$page = max(1, (int) $page);

		// No page number in URLs to first page
		if ($page === 1 AND ! $this->config[‘first_page_in_url‘])
		{
			$page = NULL;
		}

		switch ($this->config[‘current_page‘][‘source‘])
		{
			case ‘query_string‘:   //不带之前url参数
				return URL::site(Request::current()->uri(),NULL,FALSE).URL::query(array($this->config[‘current_page‘][‘key‘] => $page));

			case ‘route‘:   //带上之前url参数
				return URL::site(Request::current()->uri(array($this->config[‘current_page‘][‘key‘] => $page)),NULL,FALSE).URL::query();
		}

		return ‘#‘;
	}

  E:\html\kohana\application\classes\Controller\Blog.php

    //列表分页
    public function action_index() {
        //first calc average count
        $count = model::factory(‘Post‘)->posts_count();
        //you can change items_per_page
        $num = 2;
        //you can configure routes and custom routes params
        $pagination = Pagination::factory(array(
                ‘total_items‘    => $count,
                ‘items_per_page‘ => $num,
                //‘current_page‘   => Request::current()->param("page"),
                ‘current_page‘   => array(‘source‘ => ‘route‘, ‘key‘ => ‘page‘),
            )
        );
        $posts_list = model::factory(‘Post‘)->posts_list($pagination->items_per_page, $pagination->offset);
        $view = View::factory(‘blog/list‘)->set(‘posts‘, $posts_list)->set(‘pagination‘,$pagination);
        $view->render();
        $this->response->body($view);
    }

 kohana隐藏index.php 

步骤1:.htaccess

# Turn on URL rewriting
RewriteEngine On

# Installation directory
rewriteBase /

# Protect hidden files from being viewed
<Files .*>
	Order Deny,Allow
	Deny From All
</Files>

# Protect application and system files from being viewed
#RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
RewriteRule ^(application|modules|system)/ - [F,L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
#RewriteRule .* index.php/$0 [PT]
RewriteRule .* index.php [L]

步骤2:Url::site(‘blog/add‘, NULL, FALSE)

	/**
	 * Fetches an absolute site URL based on a URI segment.
	 *
	 *     echo URL::site(‘foo/bar‘);
	 *
	 * @param   string  $uri        Site URI to convert
	 * @param   mixed   $protocol   Protocol string or [Request] class to use protocol from
	 * @param   boolean $index		Include the index_page in the URL
	 * @return  string
	 * @uses    URL::base
	 */
	public static function site($uri = ‘‘, $protocol = NULL, $index = TRUE)
	{
		// Chop off possible scheme, host, port, user and pass parts
		$path = preg_replace(‘~^[-a-z0-9+.]++://[^/]++/?~‘, ‘‘, trim($uri, ‘/‘));

		if ( ! UTF8::is_ascii($path))
		{
			// Encode all non-ASCII characters, as per RFC 1738
			$path = preg_replace_callback(‘~([^/]+)~‘, ‘URL::_rawurlencode_callback‘, $path);
		}

		// Concat the URL
		return URL::base($protocol, $index).$path;
	}

  

步骤3:bootstrap.php

 * - string   base_url    path, and optionally domain, of your application   NULL
 * - string   index_file  name of your index file, usually "index.php"       index.php
 * - string   charset     internal character set used for input and output   utf-8
 * - string   cache_dir   set the internal cache directory                   APPPATH/cache
 * - integer  cache_life  lifetime, in seconds, of items cached              60
 * - boolean  errors      enable or disable error handling                   TRUE
 * - boolean  profile     enable or disable internal profiling               TRUE
 * - boolean  caching     enable or disable internal caching                 FALSE
 * - boolean  expose      set the X-Powered-By header                        FALSE
 */
Kohana::init(array(
 ‘base_url‘   => ‘/‘,
 ‘index_file‘ => ‘‘,
));

  

原文地址:https://www.cnblogs.com/hnhycnlc888/p/10965081.html

时间: 2024-11-25 13:34:46

php 后台转发和重定向的区别及kohana框架当前url加参数方式的相关文章

转发与重定向的区别总结

重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求.因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变.重定向的速度比转发慢,因为浏览器还得发出一个新的请求.同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用. 怎么选择是重定向还是转

jsp中转发和重定向的区别!

请求是单向的,如果A请求B,之后A请求C的时候 A到B的请求断开! 转发和重定向的区别! 01.转发 request 001.转发是服务器端的行为 002.数据不会丢失 003.url不会发生变化,永远是第一次请求的url 004.每转发一次,作用域延迟一次请求! 02.重定向 response 001.转发是客户端的行为 002.数据会丢失 003.url会发生变化,永远是最后一次请求的url 004.至少两次访问服务器

转发与重定向的区别

转发和重定向的区别    1>        转发只能转发同一个web应用工程里面的内容,        重定向可以重定向到任何工程的内容.    2>        转发:/代表当前工程目录        重定向:/代表webapps目录.    3>        转发时:浏览器地址栏不变        重定向时:浏览器地址栏不变.    4>        转发是服务器的内部行为,浏览器不知        重定向是浏览器和服务的的协同行为.    5>        转

Java中转发与重定向的区别

    转发与重定向的区别 转发是服务器行为,重定向是客户端行为 1.转发在服务器端完成的:重定向是在客户端完成的2.转发的速度快:重定向速度慢3.转发的是同一次请求:重定向是两次不同请求4.转发不会执行转发后的代码:重定向会执行重定向之后的代码5.转发地址栏没有变化:重定向地址栏有变化6.转发必须是在同一台服务器下完成:重定向可以在不同的服务器下完成 在servlet中调用转发.重定向的语句如下: request.getRequestDispatcher("new.jsp").for

Servlet转发和重定向的区别

附上视频教学的一张图: 区别: 1.转发产生一次请求,一次响应: 重定向产生2次请求 两次响应 2.转发客户端不可见的: 重定向客户端是可以察觉的. 3.转发时候url不变: 重定向URL会改变 案例:A与B两个Servlet的转发与重定向 转发:getRequestDispatcher(); ServletContext context= getServletContext(); RequestDispatcher dis = context.getRequestDispathcer("/b&

servlet之转发与重定向的区别

转发(服务器端跳转):  一次请求 <jsp:forward> request.getRequestDispatcher("new.jsp").forward(request, response); 重定向(客户端跳转):  两次请求 response.sendRedirect("new.jsp"); <a href="new.jsp">new.jsp</a> 转发重定向: 1.转发是在服务器端完成,因此称为服

SERVLET API中转发与重定向的区别?

SERVLET API中转发与重定向的区别? 1.转发(forward方法) 转发仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址. 转发是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址. 2.重定向(sendRedirect方法) 重定向是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接.这样,从浏览器的地址栏中可以看到跳转后的链

请求转发和重定向的区别以及他们的实现方式?

1.请求转发是什么? 答:请求转发是RequestDispatcher.forword方法:作用是:在服务器端内部将请求转发给另一个资源,浏览器只知道发出请求并得到响应结果,但不知道在服务器程序内部发生了转发行为. 举例:别名为“浏览器”的人写信找张三100块,张三只有50块,于是张三找李四借了50块,然后将钱转给“浏览器”.可知,“浏览器”只发出一封信和收到一次回复,他只知道钱是张三借给他的,并不知道有一部分是李四的. 2.重定向是什么? 答:重定向是HttpServletResponse.s

Servlet &amp; JSP - 转发与重定向的区别

本文转载自:http://blog.csdn.net/kobejayandy/article/details/13762043 转发 转发的原理,可以通过下图展示: 浏览器的请求发送给组件 1,组件 1 经过一些处理之后,将 request 和 response 对象 “传递” 给组件 2,由组件 2 继续处理,然后输出响应(当然,也可以继续向其他组件 “传递”),这个传递的过程称之为 “转发”.整个过程只涉及一次浏览器和服务器之间的 “请求-响应” ,转发过程中的组件共享同一个请求 (requ