MediaTemple上的ExpressionEngine - 删除index.php会导致“未指定输入文件”

时间:2012-11-08 01:15:57

标签: expressionengine mediatemple

我有一个带有标准ExpressionEngine htaccess代码的MT站点,用于删除index.php并且主页可以工作,如果我将index.php放在URL中,所有其他页面都可以工作。没有它,我得到“没有指定输出文件”。它适用于我的本地和非MT服务器,所以我知道它是一个环境的东西。需要更改htaccess中的哪些内容才能使其在MT上运行?

<IfModule mod_rewrite.c>

# Enable Rewrite Engine
# ------------------------------
RewriteEngine On
RewriteBase /


# Use Dynamic robots.txt file
# ------------------------------
RewriteRule robots\.txt /robots.php [L]


# Redirect index.php Requests
# ------------------------------
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/admin/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]


# Standard ExpressionEngine Rewrite
# ------------------------------
RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

</IfModule>

4 个答案:

答案 0 :(得分:7)

感谢@danielcgold通过twitter获得答案:

尝试使用此行RewriteRule ^(.*)$ /index.php?/$1 [L]并注意?在index.php之后

答案 1 :(得分:5)

昨晚我在(mt)的所有ExpressionEngine网站上发布了我的标准重写规则。

## BEGIN Expression Engine Rewrite

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteRule ^(.*)$ /index.php?/$1 [L]

## END Expression Engine Rewrite

答案 2 :(得分:0)

使用EE 2.7.0和Mediatemple的网格服务(以前称为“GS”),我很幸运使用标准.htaccess:

<IfModule mod_rewrite.c>
        RewriteEngine On

        # Removes index.php from ExpressionEngine URLs
        RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

然后进入AccountCenter&gt; [mydomain.com]&gt; PHP设置,并将PHP版本从 5.5.1 CGI(最新)更改为 5.3.7 CGI(稳定)

答案 3 :(得分:0)

我在ExpressionEngine Stack Exchange网站上发布了this solution,但简而言之,我们必须使用的共享托管环境被迫使用FastCGI,我们无法修改任何CGI或PHP配置。

为了尝试自己创建$_SERVER['PATH_INFO']变量,对我来说有用的是这个3步“自定义”方法:

  1. 首先,在ExpressionEngine > CP Home > Admin > System Administration > Output And Debugging中,我将强制网址查询字符串设置为
  2. 接下来,如前面的答案中所述,我将.htaccess指令从RewriteRule ^(.*)$ /index.php/$1 [L,QSA] 更改为 RewriteRule ^(.*)$ /index.php?/$1 [L,QSA](在index.php之后的额外?)
  3. 最后,我将这段自定义PHP代码添加到站点根目录index.php文件的顶部,以“强制”$_SERVER['PATH_INFO']变量准确存在:

    <?php
    
        $path = $_SERVER['REQUEST_URI'];
        $pos = strpos($path, '?');
        if ($pos !== false)
            $path = substr($path, 0, $pos);
        $_SERVER['PATH_INFO'] = $path;
    
        /**
         * ExpressionEngine - by EllisLab
           ...
           ...
    
  4. 我希望这有助于某人!我真的把头发拉出来试图找到更优雅的解决方案!