参考来源:php
http://chinablog.blog.51cto.com/276793/280278html
1、问题背景正则表达式
使用wordpress搭建网站,为了让文章URL看起来漂亮一点,wordpress提供了设置-》固定连接设置-》选择你喜欢的url结构。apache
因此,咱们通常为了用户看着这个url顺眼一点,会进行url地址的自定义,好比:http://localhost/wordpress/archives/36.html,wordpress默认的是http://localhost/wordpress/archives/36,也就是说咱们能自定义这个url结构。浏览器
2、问题存在安全
我就如图所示选择了数字型的url结构,而后保存设置,点击站点查看。ide
看到的结果是Not Found。wordpress
下图,没法显示文章内容性能
3、解决问题学习
我忽略了一个问题,那就是要让Apache支持mod_rewrite模块,而我并无在Apache的配置文件中开启。
开启Mod_rewrite模块方法:
一、直接打开apache\conf\httpd.conf
二、搜索 LoadModule rewrite_module modules/mod_rewrite.so (可能版本不同这个不同,不过Apache2都是这个),去掉前面的#
三、 搜索AllowOverride None 替换为 AllowOverride All
保存文件-》重启Apache-》刷新站点
文章显示了。如图:
关于Mod_rewrite
mod_rewrite这个模块是如何工做的呢?
mod_rewrite截获符合特定条件的URL,并按照设定的规则将它们改写成须要的URL。
好比,能够将 http://www.mysite.com/product.php?pid=123312 这样的URL改写成
http://www.mysite.com/product-123312.html 这样的静态URL
重写的规则
重写的规则的表达式:
RewriteRule 模式 替换 [选项]
RewriteRule 是一个简单的命令告诉mod_rewrite这个模块如何去重写,关键的地方在于能够在模式和替换中使用正则表达式来匹配相应的字符,正则表达式的普遍的灵活性能将动态的URL转换成各式各样的符合要求的静态URL。看看这个重写规则:
RewriteRule /products/([0-9]+)
/fancy/products.php?id=$1
当你在浏览器地址栏输入 http://www.mysite.com/product/123 时,这个地址被重写为 http://www.mysite.com/fancy/product.php?id=123
这样,访问者就没法知道你的程序真正放在那个目录,程序的真正名字是什么,这也提升了网站的安全系数;这样的URL也去掉了?=这些字符,易于搜索引擎的机器人爬行你的网站。
经过正则表达式,能够写出更复杂的重写规则:
RewriteRule ^/products$ /content.php
RewriteRule ^/products/([0-9]+)$ /content.php?id=$1
RewriteRule ^/products/([0-9]+),([ad]*),([0-9]{0,3}),([0-9]*),([0-9]*$)
重写规则的选项有
看到这里,又再次提醒我学习正则表达式,要学习的还有好多好多。