URL重写使用PHP Slim Framework不能与我的Apache一起使用?

时间:2013-11-22 12:21:48

标签: apache .htaccess mod-rewrite slim

好吧,我不确定这是不是我,但我刚刚遇到了PHP的Slim框架,看起来很简单,很容易围绕更好的应用程序。我确定它是我的.htaccess文件,我不知道我到底做错了什么。

所以这适用于Slim:

  http://testvm/index.php/hello/4412

但是这个

   http://testvm/hello/4412

给我一​​个未发现的错误,来自Apache,

这个

   http://testvm/

从Slim返回404错误(或者至少我认为它是瘦的404)。

对于服务器故障,这可能是一个更好的问题,但它可能是我设置Slim的方式,我对此非常新,以及我用来安装Slim的PHP Composer。

这是我的index.php文件

        <!doctype html><html>
        <head><meta charset="utf-8"><title>Untitled Document</title></head> <body>
        <?php
            require 'vendor/autoload.php';

            $app = new \Slim\Slim();

            $app->get('/hello/:name', function ($name) {
                    echo "Hello, $name";
            });

            $app->run();
       ?>
       </body></html>

这是我当前的.htaccess文件

       Options +FollowSymLinks
       RewriteEngine On
       RewriteBase /

       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_FILENAME}.php -f
       #RewriteRule    ^$ /testvm/index.php/  [L]
       #RewriteRule    (.*) /testvm/index.php/$ [L]

如果我取消注意最底层的两条规则,我会收到服务器500错误?

我已经尝试了

         RewriteEngine On
         RewriteBase /my_app/

         RewriteCond %{REQUEST_FILENAME} !-f
         RewriteRule ^ index.php [QSA,L]

这使得“/testvm/index.php/hello/XXXX”可以工作,但是我想让它在URL中没有任何index.php文件的情况下工作?我确信这必须与我的.htaccess文件有关。

现在我在Ubuntu 13.04的VM(虚拟机)中运行它,它已经完全更新,而不是13.10 let。我已经检查过了,并且在我的这个虚拟机的apache构建中的modes-enable文件夹中列出了rewrite.load。

那么我做错了什么?

所有人都欢迎。 :)

格伦。

2 个答案:

答案 0 :(得分:1)

您可以在DOCUMENT_ROOT/testvm/.htaccess文件中尝试此规则:

   RewriteEngine On
   RewriteBase /

   RewriteRule ^$ /testvm/index.php  [L]

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^testvm/((?!index\.php/).+)$ /testvm/index.php/$1 [L,NC]

答案 1 :(得分:0)

我已经推销了你的答案是对的,因为你给了我很多帮助,我已经让它工作了,使用以下代码,

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [QSA]

所以现在如果我去testvm /我得到一个苗条的404错误,当加载testvm / hello / TESTNAMEEXAMPLE时,它会加载。

希望我上面的代码可以帮助其他人。

格伦。