呵,说来很巧,这两天我一直在改这个博客的固定URL,今天就要学这个TP的URL重写。
上一节的时候,通过教程里的方法,用http://localhost/thinkphp/index.php是可以访问MyApp这个项目的Index Action里面的IndexFunction的。
今天参考的教程是[教程] 一步一步循序渐进学习TP三(新手篇)
今天在学这个之前呢,我也在公司用http://localhost/thinkphp/index.php/index/index访问过。一切都OK。我以为回到家写这篇日志会很轻松。
可是,事情往往不像人想象的那么顺利。
在家访问上面的地址得到如下报错信息:
这是为什么呢?于是,GOOGLE,得到的结论如下:
如果操作系统为Linux, 注意字母的大小写
于是,我访问http://localhost/thinkphp/index.php/
问题解决。。
可是,Action和Function前面还有index.php让人很不爽。按网上的方法先做一次,试试(在公司是成功了的)
vim simaopig-server.conf
ServerName "simaopig.360.cn"
DocumentRoot "/home/simaopig/www"
<Directory "/home/simaopig/www">
AllowOverride All
Options None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
按要求将AllOverride改为All
顺便说一下,我这个环境是装Opensuse的时候默认安装的LAMP,用着还算舒服。不过默认是没有加rewrite.so的,稍候一篇文章我会讲一下我是怎么编译的。
现在继续,按照网上的教程现在我应该创建.htaccess文件来设定我的规则了。
郁闷无比的事情发生了,我设置完成后,连index.php都访问不了,403 FOOBIDDEN错误。。
找了好久也没有找到原因。。郁闷啊。。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
我甚至有想换到WINDOWS下的愿望,主啊。。
后来,查看了一下APACLE的日志,发现这么一句话
Thu Apr 23 23:44:36 2009] [error] [client 127.0.0.1] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /home/simaopig/www/thinkphp/index.php
于是,我又继续GOOGLE,居然这是一个常见错误,解决方法也很简单。那就是
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
在.htaccess文件上面加上 Option +FollowSymLinks解决问题。。
现在这个世界清静了。
我原本以为这个教程是我做起来最快的一个。因为在公司的时候(WINDOWS环境)一下就OK了。
哪想到,由于工作环境的问题会导致这么多问题。呵。学习了。。
对了,其中最重要的一步差点给落下,那就是要在config.php里面加上“’URL_MODEL’=>2,”这一项。
但是URL_MODEL都在哪定义的?呵。
define('URL_COMMON', 0); //普通模式
define('URL_PATHINFO', 1); //PATHINFO模式
define('URL_REWRITE', 2); //REWRITE模式
define('URL_COMPAT', 3); // 兼容模式


忽然想了一下,远程数据库,本地程序,写作方面理应会快些