如何通过htaccess中的多个重写规则修改URL?
|
我想问一个问题,以便了解Apache如何处理.htaccess文件中指定的规则。
在我的网站上,我使用了按类别分类的经典页面组织,每个类别都有多个部分:
http://www.mysite.com/category/section.html.
但是,没有html页面,所有内容均由pages.php中的代码处理。使用简单的重写规则,将上述URL映射到:
http://www.mysite.com/pages.php?cat=category&page=section
我决定将部分从section1重命名为section1-xxx。为了满足对旧名称(section1)的请求,我在section1-xxx.html上将简单的规则映射到section1.html。
我在.htaccess中添加的第一条规则如下:
R1
RewriteRule ^CAT1/section1.html$ CAT1/section1-xxx.html [NC]
其中CAT1是类别的名称。
R2
RewriteRule ^CAT1/(.*).html$ pages.php?cat=CAT1&page=$1 [L,NC]
我的想法是先应用R1,然后应用R2。但是,当应用这些规则时,我最终得到了一个无法解释的URL(对我的大脑而言)。
当请求下一页时
http://www.mysite.com/CAT1/section1.html
网址首先转换为
http://www.mysite.com/CAT1/section1-xxx.html/section1.html
然后在
http://www.mysite.com/pages.php?cat=CAT1&page=section1-xxx.html/section1
出于好奇,我在规则R1中添加了L(标志):
RewriteRule ^CAT1/section1.html$ CAT1/section1-xxx.html [L,NC]
而且一切正常。现在,可以通过以下方式投放http://www.mysite.com/CAT1/section1.html:
http://www.mysite.com/pages.php?cat=CAT1&page=section1-xxx
现在的问题:
为什么在将L标志添加到规则R1之前获得该URL?
L标志应指示应用匹配规则,然后停止使用其他规则。但是,设置L标志后,将同时应用R1和R2。为什么?
谢谢你的时间。
问候,
一种。
没有找到相关结果
已邀请:
2 个回复
厘恼轨
迪擅哨乘傅