apache2.4.7 .htaccess重写url的一些细节

今晚玩了下apache的重写规则,发现一些被容易忽略的细节,分享一下。

首先,说明一下实例环境的其他相关配置:

documentRoot  /var/www/html

.htaccess的放置路径  /var/www/html/L-Production/public

1、替换规则的“绝对”和“相对”,例如:

1 # Redirect Trailing Slashes...
2 RewriteRule ^(.*)/$ /$1 [L,R=301]

这是一个用重定向消除url最后斜杠的实现,这里需要注意 /$1 的斜杠,它是一个“绝对”的写法,当我在浏览器输入http://127.0.0.1/L-Production/public/js/,意外发现url被重定向成http://127.0.0.1/js,而当我把 /$1 的斜杠去掉后,url才被重定向为预期的http://127.0.0.1/L-Production/public/js。

2、模式匹配的对象与RewriteBase无关,只与.htaccess的所在目录有关,例如:

1 RewriteBase /L-Production
2
3 # Redirect Trailing Slashes...
4 RewriteRule ^(.*)/$ $1 [L,R=301]

在浏览器输入http://127.0.0.1/L-Production/public/js/,url会被重定向成http://127.0.0.1/L-Production/js,而非http://127.0.0.1/L-Production/public/js。

这说明了 ^(.*)/$ 匹配的字符串是js/,而不是url中除去了/L-Production的public/js,RewriteBase只影响替换规则。

另,我在最后的测试中还发现,当这里的$1加上斜杠后,重定向结果仍然是http://127.0.0.1/L-Production/js,这说明在设置了RewriteBase后,所有的替换规则都变成了"绝对"的。

时间: 2024-11-08 22:28:52

apache2.4.7 .htaccess重写url的一些细节的相关文章

.htaccess重写URL讲解

使用ThinkPHP和Laravel等框架的都知道,所以的请求都需要经过index.php文件入口,无论你的URI是什么. 当然除了访问的是静态文件或者访问路径的文件真实存在,例如你访问xxx.com/home/page.html 首先,web服务器先去更目录找home文件夹下面的page.html,如果存在就访问这个文件,如果不存在就重新URL,进入index.php大入口 当然,这一切都是规则制定的.请看下面的.htaccess文件[不记得怎么写我教你,.ht+access ] <IfMod

.htaccess文件url重写小记

.htaccess文件url重写 当上一条规则匹配 并转换后 符合下一条规则的 继续下一条的匹配转换 RewriteRule ^shangpin-([0-9a-zA-Z]+)/category-([0-9]+)-([0-9]+)-(.+)\.html$ shangpin-$4&id=$2&page=$3 RewriteRule ^shangpin-([a-zA-Z_]+)-(.*) category\.php\?sort=$1&order=$2 在网址 shangpin-cat14

在Apache中使用mod_rewrite模块重写URL

如果有使用第三方框架做项目时,url路径是可以同过框架给的方法来设定的(如thinkphp),但如果使用原生php写的项目又想重写url,则可通过apache的一些设置来达到想要的效果. 在更改apache的配置之前,应该先了解一些apache的知识:apache中的Directory标签的作用是用于标记我们如何在特定目录订制apache的行为.该标签里会有一个绝对路径,该路径就是你想订制行为的目录. 总体通过apache修改URL的思路就是,在.htaccess文来中对你想要重写的url地址进

CI框架 .htaccess 隐藏url中index.php的解决

CodeIgniter(以下简称"CI")是一款国外优秀的PHP轻量级MVC框架,它支持PHP4和PHP5,是开发中小型可拓展性需求高的Web应用程序的利器.目前你所见到的这个博客程序,正是采用CI进行的编写. 秉承MVC架构的思想,CI中的所有控制器都需要经过单点入口文件index.php(默认)来加载调用.也就是说,在默认情况下,所有CI开发项目的URL都形如以下这种形式: http://localhost/index.php/blog/logs/this_is_a_test_en

在js中获取query string 以及重写URL的函数

函数用途:如标题,1. 从URL中解析出参数,2.重写URL中的参数值 如下代码所示,包含了测试.可以直接copy到浏览器中,输入测试地址:localhost:xxx?a=1&b=2&c=3 ,在console中运行查看结果: // - test // - get from current location var url = document.location.href; // - extract param from url console.log(getUrlParam(url,&q

urlrewrite重写url(转)

环境: Maven 3.0.4 Urlrewrite 2.5.2 Myeclipse 8.6.1 借此机会顺便提一下 Maven Project 的创建,会了的朋友或还不想了解 Maven 的朋友,可以略过创建过程. 创建一个 Maven Project:New --> Other --> Maven Project 在弹出的对话框里,如果你想修改你项目的存放路径你可以改一下,其他的默认,我的所有项目都是存放在默认的工作区下,所以直接点NEXT 接下来找到并选择webapp,其他的默认,NEX

WebService重写url

废话不多说: 1.下载Intelligencia.UrlRewriter.dll文件   并且引用 2. 配置webconfig 1 <configuration> 2 <configSections> 3 <section name="rewriter" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,Intelligencia.

HttpContext.Current.RewritePath方法重写URL

if (!IsPostBack) { //如果请求ID为空,则重写URL为:~/index.aspx?ID=shouji.115sou.com if (Request.QueryString["ID"]==null || Request.QueryString["ID"].Trim()=="") { HttpContext.Current.RewritePath("~/index.aspx?ID=shouji.115sou.com&qu

squid如何做正向代理,通过重定向器匹配正则重写url

首先是下载安装squid,squid的官网下载地址页面是http://www.squid-cache.org/Versions/,我安装的是3.5 stable版,此处不赘述,无非是configure.make.make install等 下文参考: http://www.liusuping.com/ubuntu-linux/squid-bianyi-anzhuang-canshu.html http://linuxme.blog.51cto.com/1850814/372960 http://