关于Thinkphp3.1.2和3.2.3的URL重写
2015.8.23 22:34
坑爹啊!坑爹啊!!坑爹啊!!!
经过凡哥一晚上的摸索T T,终于明白了不同版本URL的重写规则!
因为3.2.3版本的目录不同,所以在写URL的时候和3.1.2也不同,正常情况下3.2.3的URL写法例如http://localhost/kengdiea/index.php/Home/Index/index,而对应得3.1.3写法例如http://localhost/kengdiea/index.php/Index/index。重写URL需要添加.htaccess文件,内部代码:
<IfModulemod_rewrite.c>
Options+FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1[QSA,PT,L] //!!!!!!!
</IfModule>
注意标注的那一行!!!
添加.htaccess文件后,就可重写URL了,可以在URL中省去index.php。3.2.3中新的代码例如:http://localhost/kengdiea/Home/Index/index,注意,3.2.3中不能省去Home!!!而3.1.2中新的代码如:http://localhost/kengdiea/Index/index。
而某一次!倒霉的凡哥在网上看到了关于改写3.2.3URL的另外一个办法,那就是在.htaccess文件中,在标注的那一行RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]中index.php后面加上Home,即变为RewriteRule^(.*)$ index.php/Home/$1 [QSA,PT,L],改变之后3.2.3中,完整的URL例如http://localhost/kengdiea/index.php/Home/Index/index,简化地址可以为http://localhost/kengdiea/Index/index,这下省略了Home!!!是不是感觉很厉害!但是!坑爹的来了!加上入口文件index.php使URL为http://localhost/kengdiea/index.php/Index/index却显示无法加载模块Index!!!哥哥我为这个纠结了一晚上!!!后来仔细分析了下http://localhost/kengdiea/index.php/Home/Index/index页面TRACE请求信息才明白了!尼玛!原来是因为RewriteRule ^(.*)$ index.php/Home/$1 [QSA,PT,L]中多加了Home!!!虽然加了Home可以省略URL中的index.php/Home是很方便,但除非个人特别需要,否则本人不建议这样使用,遵循Thinkphp原始法则,保持RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]不变而在URL中乖乖加上Home是比较正规的写法。另外蛮重要的一点是页面TRACE,在配置文件中加上'SHOW_PAGE_TRACE'=>true, 开启页面TRACE分析页面有助于改错。
坑爹啊,搞了一晚上,原谅我是个新手,too young too simple…不过终于弄明白了。安心了,T T