12月 12

Apache的mod_rewrite创建静态页面 晴

yaiba , 15:47 , 技术运用 , 评论(0) , 引用(0) , 阅读(873) , Via 本站原创
弄了两天,摸爬滚打的算是弄出来了,重来也没接触过这个东西,问谁谁也不知道,都是大概知道个一二,实际做起来谁都叫不准,没办法,摸着石头过河,现在来写个总结存个档,日后若有需要也可有个参考(本人健忘,超级健忘:P),来看我日志的朋友也可顺便学习学习,本着相互交流共同进步的原则,互相探讨其中的不足和改进。
案例说明:
当用户访问页面如http://v.sina.com/html/u/2007/10/13/v_1427503.html时(其中u、2007、10、13、v_1427503可变),如果这种模式的链接由apache判断这个页面不存在的时候,将页面重新跳转到http://v.sina.com/video.php?type=create&id=1427503,这个链接中id的值是需要根据请求链接中v_后边的值确定。
解决方案:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^/html/([a-z0-9]+)/(\d+)/(\d+)/(\d+)/([a-z0-9]+)_([0-9]+).html$
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /video.php?type=create&path=$1  [L,QSA]

方案说明:
1、开启重定向引擎.
2、判读请求文件的完整路径是否符合“^/html/([a-z0-9]+)/(\d+)/(\d+)/(\d+)/([a-z0-9]+)_([0-9]+).html$”这个模式,符合了才继续下一步.
3、%{DOCUMENT_ROOT}表示服务器根目录,%{REQUEST_FILENAME}这是与请求相匹配的完整的本地文件系统的文件路径名或描述.
4、判断的条件
-d (是一个目录[directory]) ,将teststring视为一个路径名并测试它是否存在而且是一个目录.
-f (是一个常规的文件[file]) ,将teststring视为一个路径名并测试它是否存在而且是一个常规的文件.
-s (是一个非空的常规文件[size]) ,将teststring视为一个路径名并测试它是否存在而且是一个尺寸大于0的常规的文件.
-l (是一个符号连接[link]) ,将teststring视为一个路径名并测试它是否存在而且是一个符号连接.
-f (对子请求有效的业已存在的文件) ,测试teststring是否一个有效的文件, 而且可以被服务器当前已经配置的所有存取控制所存取。 它用一个内部子请求来做判断,由于会降低服务器的性能,请小心使用!
-u (对子请求有效的业已存在的url) ,测试teststring是否一个有效的url, 而且可以被服务器当前已经配置的所有存取控制所存取。 它用一个内部子请求来做判断,由于会降低服务器的性能,请小心使用!
注意
所有这些测试都可以用惊叹号作前缀(!)以实现条件的反转.
5、重定向规则
将符合条件的所有语句重定向到“/video.php?type=create&path=$1”,$1表示匹配的整段URL

更多可参考 网摘 或者 城市胡同

【其他资料】
服务器变量: 引用方法是 %{ name_of_variable }

name_of_variable可以是下表列出的字符串之一: http headers: connection & request:
http_user_agent
http_referer
http_cookie
http_forwarded
http_host
http_proxy_connection
http_accept
remote_addr
remote_host
remote_user
remote_ident
request_method
script_filename
path_info
query_string
auth_type

server internals: system stuff: specials:
document_root
server_admin
server_name
server_addr
server_port
server_protocol
server_software
time_year
time_mon
time_day
time_hour
time_min
time_sec
time_wday
time
api_version
the_request
request_uri
request_filename
is_subreq
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]