Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mod_rewrite来回重写URL_Php_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 使用mod_rewrite来回重写URL

Php 使用mod_rewrite来回重写URL,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,也许这看起来是一个非常简单的问题,我的网站的url写得非常好,所以我想重写它们。所以我准备激活mod_rewrite。问题如下: 假设我的url从site\u url/index.php?page=mypage&type=mytype切换到site\u url/mypage/mytype,如果刷新页面会发生什么情况,是否有必要在.htaccess文件中加入进行重写的相反过程?在.htaccess中,您应该前进一个映射到 ^/(mypage)/(mytype) to index.php?page=

也许这看起来是一个非常简单的问题,我的网站的url写得非常好,所以我想重写它们。所以我准备激活mod_rewrite。问题如下:


假设我的url从
site\u url/index.php?page=mypage&type=mytype
切换到
site\u url/mypage/mytype
,如果刷新页面会发生什么情况,是否有必要在.htaccess文件中加入进行重写的相反过程?

在.htaccess中,您应该前进一个映射到

^/(mypage)/(mytype) to index.php?page=$1&type=$2
但反过来就不必管了。因此,直接请求
site\u url/index.php?page=mypage&type=mytype
只需按原样传递即可


因此,刷新不会改变任何东西。

您需要重定向和重写的组合。URL重写过程的大纲草案如下:

  • 如果URL包含
    .php
    ,301/302将请求重定向到其SEO友好版本。这将更改浏览器地址栏中的地址
  • 如果请求SEO友好的URL,请将其重写为PHP版本。这不会更改浏览器地址栏中的地址
下面是重写规则的一个非常基本的示例,可以同时执行上述两项操作:

#
# redirect /index.php?page=somepage&type=sometype to friendly url
# 
RewriteCond %{THE_REQUEST} /index\.php
RewriteCond %{QUERY_STRING} page=(\w+)&type=(\w+)
RewriteRule ^index\.php$ /%1/%2? [R,L]

#
# rewrite /somepage/sometype to index.php
# 
RewriteRule ^(\w+)/(\w+)$ index.php?page=$1&type=$2

你想怎么重写?浏览器中的URL是什么,内部应该是什么样子?@OlafDietsche我希望这个URL站点\u URL.index.php?page=mypage&type=mytype显示为site\u URL/mypage/mytype,所以我想知道刷新页面站点\u URL/mypage/mytype时发生了什么,当我使用代码路由不支持的同一个url发出get请求时,会发生什么?url从不从
site\u url/index.php?page=mypage&type=mytype
切换到
site\u url/mypage/mytype
,情况正好相反,我认为这就是造成混淆的原因。第一步是在浏览器的地址栏中输入
site\u url/mypage/mytype
。它是一直显示的URL,其路径甚至不必存在。下一步是使用mod_rewrite指令捕获该请求,以静默方式将其映射到现有资源(如PHP文件)。此操作是隐藏的,由“pretty”URL触发,而不是相反。事实上,我的问题是当我刷新页面站点时会发生什么?URL/mypage/mytype,以及当我使用代码路由没有的相同URL发出get请求时会发生什么supporting@user1611830,你所说的“代码路线”是什么意思?重定向?重写?需要特殊性。此外,刷新和刷新get请求没有什么不同,只是浏览器不会对某些附加项使用缓存。