2012-11-08 63 views
4

我有一個MT站點的標準ExpressionEngine htaccess代碼刪除index.php和主頁的作品,所有其他網頁的工作,如果我把索引。URL在URL中。沒有它,我會得到「沒有指定輸出文件」。它適用於我的本地和非MT服務器,所以我知道它是一個環境問題。需要修改htaccess中的哪些內容才能在MT上運行?ExpressionEngine MediaTemple - 刪除index.php導致「沒有指定輸入文件」

<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> 
+0

如果您使用這種方法添加?在index.php的結尾處,並且您使用301重定向將舊頁面重定向到新頁面,您可能會發現重定向轉到404頁面的URL /?/ old-page。在這種情況下,不要使用301重定向,而是使用RewriteRule。看到這裏: http://ellislab.com/forums/viewthread/167241/#799494 –

回答

5

昨天晚上我發佈了一個Gist,我的標準重寫規則適用於所有ExpressionEngine網站(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 
+0

我正在使用MediaTemple DV4,升級後我的標準.htaccess不起作用。這個答案是爲我解決了這個問題。 –

+1

我剛剛在上週發現了這一點,Plesk默認將運行PHP的服務器設置爲FastCGI,因此在上次重寫規則中需要'?'。直到前幾天,我完全沒有意識到這一點。切換回在Apache下運行PHP允許刪除'?'。有關我遇到的301個問題的更多上下文,請參閱此主題:http://expressionengine.stackexchange.com/questions/5188/301-redirects-appending-query-string/5218#5218 – Siebird

7

感謝@danielcgold爲通過Twitter回答:

嘗試使用該行RewriteRule ^(.*)$ /index.php?/$1 [L]並注意? after index.php

+0

如果乍得可以編輯與工作腳本的原始帖子,會很好。關於什麼是正確的迭代有點不清楚,我一定想試試這個.htaccess文件。 –

+0

@JustinKimbrell用乍得的改正取代了最後一行。 – Siebird

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> [MYDOMAIN PHP設置,並將PHP版本從更改爲5.5.1 CGI(最新)5.3.7 CGI(穩定)

0

我在ExpressionEngine Stack Exchange站點上發佈了this solution,但簡而言之,我們必須使用的共享主機環境被迫使用FastCGI,並且我們無法修改任何CGI或PHP配置。

在試圖創建$_SERVER['PATH_INFO']變量自己,什麼工作對我來說是這3步「定製」的方法:

  1. 首先,在ExpressionEngine > CP Home > Admin > System Administration > Output And Debugging,我設置力URL查詢字符串沒有
  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 
         ... 
         ... 
    

我希望這可以幫助別人!我真的把我的頭髮拉出來試圖找到更優雅的解決方案!

相關問題