几个月之前就想去掉vms的url中那难看的入口文件,也曾google多次,无果。前两个月抱着试一试的心态向wdcp中添加了一个规则(事实证明该规则完全可用),但当规则生效之后站点立刻就http 400了,无论如何也无法恢复,只得关闭url rewrite规则。
前天头脑一热想继续整这个事儿,于是本着“碰运气”的目的再次打开了wdcp这坑货,调整url rewrite规则,生效……得,又挂了 无奈撤销规则后,转念一想:apache不是有.htaccess吗?我为何一定要在wdcp这坑货这儿设置呢?心动不如行动,果断添加规则,使其生效。写一个测试页面打印出$_SERVER
,一看,还真成功了。规则如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
这时手动访问去掉index.php
的url,确实是被web server正常解析的,可是vms的路由完全不认,一切都在错乱……╮(╯▽╰)╭看起来又要改代码了。花了几秒钟快速地找到了rewrite部分CodonRewrite.class.php
,看到最终进入路由分析的$URL是这样赋值的:$URL = $_SERVER['REQUEST_URI'];
然而在这之后又有$params = explode('.php/', $URL);
明显看得出来真正需要的内容是在index.php/
之后的,但是目前隐藏index.php
之后REQUEST_URI
就是浏览器地址栏中的内容,并不符合它的要求。为了减少代码修改量,果断打印$_SERVER
分析一下,一看,PHP_SELF
可以替代REQUEST_URI
嘛。果断改成$URL = $_SERVER['PHP_SELF'];
,成了。
人嘛,折腾了这个以后,总想着是不是再弄个后缀什么的,url更加好看。由于深受CodonRewrite部分毒害,我一直想着如何用explode()
去掉后缀(如.html
)。后来头脑中灵光一现,想到一个简单的办法:在它只留index.php/
后面部分之后,加上$preg_match = str_replace('.html', '', $params[1]);
滤掉.html,啥事儿都没了。
之后为了使Codon Framework自带的url生成功能url
方法自动重写,当然是稍作修改。非常简单,这里就不说了。