4

index.php を削除するための標準の ExpressionEngine htaccess コードを含む MT サイトがあり、ホームページが機能し、index.php を URL に入れると他のすべてのページが機能します。それがないと、「出力ファイルが指定されていません」というメッセージが表示されます。それは私のローカルおよび非MTサーバーで動作するので、環境の問題を知っています. MT で動作させるには、htaccess の何を変更する必要がありますか?

<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に感謝します:

この行RewriteRule ^(.*)$ /index.php?/$1 [L]を使用してみて、? index.phpの後

于 2012-11-08T01:15:56.823 に答える
5

昨夜、すべての ExpressionEngine サイトの標準的な書き換えルールを記載した Gist を (mt) に投稿しました。

## 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

このソリューションを ExpressionEngine Stack Exchange サイトに投稿しましたが、一言で言えば、使用しなければならなかった共有ホスティング環境は FastCGI を使用することを余儀なくされ、CGI や PHP の構成を変更することはできませんでした。

$_SERVER['PATH_INFO']自分で変数を作成しようとして、私にとってうまくいったのは、次の 3 ステップの「カスタム」アプローチでした。

  1. まず、 で[Force URL query strings][NoExpressionEngine > CP Home > Admin > System Administration > Output And Debugging ]に設定します。
  2. 次に、以前の回答で述べたように、.htaccessディレクティブをRewriteRule ^(.*)$ /index.php/$1 [L,QSA] から RewriteRule ^(.*)$ /index.php?/$1 [L,QSA](extra ? after 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 に答える