社区
基础编程
帖子详情
结合apache 的p hp 伪静态URL怎么写? 【指教】
骄傲青蛙
2009-05-29 09:13:43
在网上搜了下,全是错的,主要正则那部份? 有谁做过?
...全文
214
19
打赏
收藏
结合apache 的p hp 伪静态URL怎么写? 【指教】
在网上搜了下,全是错的,主要正则那部份? 有谁做过?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xb12369
2012-02-08
打赏
举报
回复
RewriteRule ^([a-zA-Z0-9]+).html $1.php
index.php=>index.html
海诗美妆
2009-06-04
打赏
举报
回复
[Quote=引用楼主 coolesting 的帖子:]
在网上搜了下,全是错的,主要正则那部份? 有谁做过?
[/Quote]
正则如何写,要看你网站路径如何,还有就是你如何设计的。
你这种问法,缘木求鱼。
Exbox
2009-06-04
打赏
举报
回复
有区别,也有很多类似的地方。比如[^]也是表示反选,在方括号之外也是表示字首。
但是apache里有$N的表示方法,N最大为9,每个圆括号内的正则为一个节点,也就是一个"N"
RewriteRule ^post-([\w]+)-([\w]+)-([\w]+).html post.php?st=$1&st=$2&sk=$3
这里共有3个(),也就是三个"N",所以后面用"$1$2$3"来引用他们
于是post-x-xx-xxx.html就指向post.php?st=x&st=xx&sk=xxx了。
也可以表示post-xxx-xx-x.html指向 post.php?st=xxx&stxx&x,因为[\w]+是不限制长度的字母
唔…希望表达清楚了
RewriteRule指令前面可能会有RewriteCond指令,但是RewriteCond要怎么写还是不太明白,把Rewritecond的说明贴这里,希望对您有用
RewriteCond指令格式
语法: RewriteCond TestString CondPattern [flags]
RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。
1、 TestString是一个纯文本的字符串,除了包含普通的字符外,还可以包括下列的可扩展结构:
1)$N:RewriteRule后向引用,其中(0 <= N <= 9) 。$N引用紧跟在RewriteCond后面的RewriteRule中模板中的括号中的模板在当前URL中匹配的数据。
2)%N:RewriteCond后向引用,其中(0 <= N <= 9) 。%N引用最后一个RewriteCond的模板中的括号中的模板在当前URL中匹配的数据。
3)${mapname:key|default}:RewriteMap扩展。
2、CondPattern是条件pattern, 即一个应用于当前实例TestString的正则表达式, 即TestString将会被计算然后与CondPattern匹配。作为一个标准的扩展正则式,CondPattern有以下补充:
1)可以在模板串前增加一个!前缀,以用表示不匹配模板。但并不是所有的test都可以加!前缀。
2)CondPattern中可以使用以下特殊变量:
'
'>CondPattern’ (大于) 将condPattern当作一个普通字符串,将它和TestString进行比较,当TestString 的字符大于CondPattern为真。
‘=CondPattern’ (等于) 将condPattern当作一个普通字符串,将它和TestString进行比较,当TestString 与CondPattern完全相同时为真.如果CondPattern只是 “” (两个引号紧挨在一起) 此时需TestString 为空字符串方为真。
‘-d’ (是否为目录) 将testString当作一个目录名,检查它是否存在以及是否是一个目录。
‘-f’ (是否是regular file) 将testString当作一个文件名,检查它是否存在以及是否是一个regular文件。
‘-s’ (是否为长度不为0的regular文件) 将testString当作一个文件名,检查它是否存在以及是否是一个长度大于0的regular文件。
‘-l’ (是否为symbolic link) 将testString当作一个文件名,检查它是否存在以及是否是一个 symbolic link。
‘-F’ (通过subrequest来检查某文件是否可访问) 检查TestString是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能。
‘-U’ (通过subrequest来检查某个URL是否存在) 检查TestString是否是一个合法的URL,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部subrequest完成的, 因此需要小心使用这个功能以降低服务器的性能。
3、[flags]是第三个参数,多个标志之间用逗号分隔。
1)’nocase|NC’ (不区分大小写) 在扩展后的TestString和CondPattern中,比较时不区分文本的大小写。注意,这个标志对文件系统和subrequest检查没有影响.
2)’ornext|OR’ (建立与下一个条件的或的关系) 默认的情况下,二个条件之间是AND的关系,用这个标志将关系改为OR。例如: RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule … 如果没有[OR]标志,需要写三个条件/规则.
骄傲青蛙
2009-06-04
打赏
举报
回复
终于明白, 平时正则是用^开头 $结尾的
这里有点不同
骄傲青蛙
2009-06-04
打赏
举报
回复
[Quote=引用 16 楼 froole 的回复:]
引用楼主 coolesting 的帖子:
在网上搜了下,全是错的,主要正则那部份? 有谁做过?
正则如何写,要看你网站路径如何,还有就是你如何设计的。
你这种问法,缘木求鱼。
[/Quote]
说得也对,开始不知道, 我以为一个正则能替代所有url ,
后来看了,大部份都是一个页面做一条正则去匹配, 这样灵性不是很好,
如果有很多不同的页面,那么此不是要很多条? 但在网上找不到这样写的正则 .
骄傲青蛙
2009-06-04
打赏
举报
回复
[Quote=引用 13 楼 Exbox 的回复:]
= =||其实不复杂…唔…似乎只是我没有解释清楚而已……
那用你给的例子:
RewriteRule ^post-([\w]+)-([\w]+)-([\w]+).html post.php?st=$1&st=$2&sk=$3
这样,post-x-xx-xxx.html就会直接指向 post.php?st=x&st=xx&sk=xxx
rewrite中,中括号是集合字符,\w表示数字或字母,\d表示数字,\w+是不限定长度
[/Quote]
在apache 里的正则和 php里的写法不同吗?
"这样,post-x-xx-xxx.html就会直接指向 post.php?st=x&st=xx&sk=xxx " 这句话里 ,为什么会有"post-x-xx-xxx.html" 的?
Exbox
2009-05-31
打赏
举报
回复
= =||其实不复杂…唔…似乎只是我没有解释清楚而已……
那用你给的例子:
RewriteRule ^post-([\w]+)-([\w]+)-([\w]+).html post.php?st=$1&st=$2&sk=$3
这样,post-x-xx-xxx.html就会直接指向 post.php?st=x&st=xx&sk=xxx
rewrite中,中括号是集合字符,\w表示数字或字母,\d表示数字,\w+是不限定长度
xue08161981
2009-05-31
打赏
举报
回复
不知道,也顶一下,不让帖子沉下去
骄傲青蛙
2009-05-31
打赏
举报
回复
[Quote=引用 8 楼 Exbox 的回复:]
我的主机需要的伪静态很简单。所以只用了这些,楼主需要更复杂的功能就要用到RewriteCond和Rewritemap了
在linux主机下用.htaccess做的
RewriteEngin on
RewriteRule ^eatery-([\w]+).html eatery.php?ename=$1
如红字所示:括号里是一个表达式,[\w]代表字母和数字,后面的+号代表一个以上的字符;在后面使用$1来引用前面括号内的表达式
可以随便扩展,比如thread-653-1-1.html就可以表示成
^thread-([\d]+)-([\d])-([\…
[/Quote]
在RewriteRule里的正则如果是这样,post.php?st=10&sc=df11&sk=11ddd
怎么写? 教育一下 ^post.php[?][0-1a-za-A*7\-\]+ ....
你写的正则好深奥
骄傲青蛙
2009-05-30
打赏
举报
回复
[Quote=引用 3 楼 fxs_2008 的回复:]
在httpd和htaccess中写是区别的
其他直接定写了界定开头结尾
[/Quote]
httpd和htaccess 写 有区别 ?
能说下原因么? 给个例子看看 ?
骄傲青蛙
2009-05-30
打赏
举报
回复
[Quote=引用 2 楼 li36669957 的回复:]
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine on
RewriteRule /(.+)-Index\.html$ /index.php?act=$1 [PT]
/abc-Index.html 也就变成 /index.php?act=abc
[/Quote]
这个不行 . . . .
fxs_2008
2009-05-30
打赏
举报
回复
在httpd和htaccess中写是区别的
其他直接定写了界定开头结尾
骄傲青蛙
2009-05-30
打赏
举报
回复
[Quote=引用 6 楼 D4s_SunnyBoy 的回复:]
http://www.usaidc.com.cn/bbs/thread-653-1-1.html
你看看这篇
要开启Apache的mod之一rewrite才行。实际效果可以看Discuz官方论坛。
[/Quote]
他的正则是已设置好的, 没有灵活性, 之前看过
TR@SOE
2009-05-30
打赏
举报
回复
从最大的范围讲,就是一个正则的表示;如果讲到细,就有很多选项可以用。你的问题太笼统了。
Exbox
2009-05-30
打赏
举报
回复
我的主机需要的伪静态很简单。所以只用了这些,楼主需要更复杂的功能就要用到RewriteCond和Rewritemap了
在linux主机下用.htaccess做的
RewriteEngin on
RewriteRule ^eatery-
([\w]+)
.html eatery.php?ename=
$1
如红字所示:括号里是一个表达式,[\w]代表字母和数字,后面的+号代表一个以上的字符;在后面使用$1来引用前面括号内的表达式
可以随便扩展,比如thread-653-1-1.html就可以表示成
^thread-([\d]+)-([\d])-([\d]).html thread.php?post=$1&uid=$2&date=$3
[\d]代表一个数字
还可以获取很多变量time类的,filename等,apache手册里有其他详细内容
D4s_SunnyBoy
2009-05-30
打赏
举报
回复
http://www.usaidc.com.cn/bbs/thread-653-1-1.html
你看看这篇
要开启Apache的mod之一rewrite才行。实际效果可以看Discuz官方论坛。
li36669957
2009-05-29
打赏
举报
回复
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine on
RewriteRule /(.+)-Index\.html$ /index.php?act=$1 [PT]
/abc-Index.html 也就变成 /index.php?act=abc
li36669957
2009-05-29
打赏
举报
回复
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine on
#RewriteRule /(.+)\Index\.html$ /index.php?act=$1 [PT]
Apache
tomcat7.0集群配置
首页 开源项目 国产开源项目 项目分类 最新收录项目 Java 开源软件 C# 开源软件 P
HP
开源软件 C/C++ 开源软件 Ruby 开源软件 Python 开源软件 Go开源软件 JS开源软件 问答 技术问答 技术分享 IT大杂烩 职业生涯 站务/建议 支付宝专区 MoPaaS专区 开源硬件专区 动弹 博客
转自51cto(http://smailes.blog.51cto.com/rss.p
hp
?uid=28248)
2.经BOIS的控制,将MBR中的Boot Record调入内存中。这里就要说说Linux的Boot程序了,Linux的Boot程序有GRUB和LILO,而CentOS默认的Boot程序是GRUB。3.通过Boot程序,访问硬盘中的Linux内核程序。4.将内核程序调入内存中。5.内核程序调用完成后,通过内核访问硬盘中将要用到的其他文件。内核第一个执行的文件是/sbin/init,而这个文件的设置
linuxcast
http://www.ed2000.com/ShowFile/161187.html 《张冰Java视频教程》(struts Hibernate spring jsp J2SE)长期更新 发布用户 ed2k 添加日期 2009/6/15 18:14:28 大 小 7.46 GB 最后更新 2012/3/3 10:36:23 标 签 计算机,教
Solaris问答集
1. Q: Solaris 的系统配置文件一般在什么地方? A: 可以查看/etc/system文件,里面有一些solaris启动时默认加载的选项,包括 共享内存大小等的设置。 2. Q: 在solaris中,用户默认的Shell在什么文件中规定? A: 可以
Linux编程之进程和线程编程
进程和线程编程 目 录1. 进程和线程编程 1. 原始管道 1. pipe() 2. dup() 3. dup2() 4. popen()和pclo
基础编程
21,891
社区成员
140,342
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章