首页 > PHP–love > thinkphp url重写

thinkphp url重写

呵,说来很巧,这两天我一直在改这个博客的固定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/Index/index,注意,这里的第一个”Index”中的”i”我可是大写的哈。

问题解决。。

可是,Action和Function前面还有index.php让人很不爽。按网上的方法先做一次,试试(在公司是成功了的)

cd /etc/apache2
vim simaopig-server.conf
<VirtualHost "simaopig.360.cn">
        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错误。。

找了好久也没有找到原因。。郁闷啊。。

    <IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
     </IfModule>
htaccess_forbidden

htaccess_forbidden

我甚至有想换到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,居然这是一个常见错误,解决方法也很简单。那就是

    Options +FollowSymLinks
    <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都在哪定义的?呵。

// ThinkPHP\Common\defines.php 支持的URL模式
define('URL_COMMON',      0);   //普通模式
define('URL_PATHINFO',    1);   //PATHINFO模式
define('URL_REWRITE',     2);   //REWRITE模式
define('URL_COMPAT',        3);     // 兼容模式
  1. wulinfo 四 24th, 2009 @ 20:03 | #1

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

  2. simaopig 四 24th, 2009 @ 21:09 | #2

    @wulinfo
    嗯。貌似是的。~~,谁知道呢,没有调研过啊。

  3. wulinfo 四 25th, 2009 @ 03:18 | #3

    @simaopig 理论上可行,改日试验

  4. simaopig 四 25th, 2009 @ 09:53 | #4

    @wulinfo
    嗯。然后记得告诉我结果哈。 :cool:

  5. 短歌行 四 25th, 2009 @ 12:18 | #5

    就是这样的,要试验好多次才行的。 :cool:

  6. simaopig 四 25th, 2009 @ 12:47 | #6

    @短歌行
    嗯。。烦人啊。。呵呵。。
    不过好在付出得到了回报。
    我现在在研究VIM的插件。因为这样可以更好的学习TP。

  7. 荒野无灯 四 25th, 2009 @ 15:46 | #7

    呵呵,这个功能很强大。如果再配合“路由”功能,伪装更强大!

  8. simaopig 四 25th, 2009 @ 16:25 | #8

    @荒野无灯
    嗯。貌似 现在很多框架都能配这个。。
    这是我第一次在完全LAMP的环境下用框架。在公司的都有别人配好的。。

评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks