4

我有一个带有标准 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

4 回答 4

7

感谢@danielcgold 通过 twitter 提供的答案:

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

于 2012-11-08T01:15:56.823 回答
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
于 2012-11-08T14:24:23.313 回答
0

使用 EE 2.7.0 和 Mediatemple 的 Grid 服务(以前称为“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 > [mydomain.com] > PHP Settings,并将 PHP 版本从5.5.1 CGI (latest)更改为5.3.7 CGI (stable)

于 2013-09-26T20:12:03.510 回答
0

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

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

  1. 首先,在 中ExpressionEngine > CP Home > Admin > System Administration > Output And Debugging,我将Force URL 查询字符串设置为No
  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
           ...
           ...
    

我希望这可以帮助别人!我真的把头发拉了出来,试图找到更优雅的解决方案!

于 2015-07-02T10:56:44.627 回答