2015-09-26 87 views
1

我正在使用有佈局頁面和內容頁面(.cntnt)的模板引擎。佈局頁面如下所示:設置選擇性重定向

<div id="body"> 
    <?php 
     include_once(substr($_SERVER['REQUEST_URI'],1) . ".cntnt"); 
    ?> 
</div> 

這個想法非常簡單:用戶提出了一個請求,例如, mysite.com/pageone,並靜靜地重定向到佈局頁面,這裏佈局頁面添加了任何模板HTML,並在上面的行中插入了請求的頁面(pageone)。我遇到的問題是設置重定向。

我用我的.htaccess文件下面的代碼:

RewriteBase/
<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_URI} !/Layout.php$ 
    RewriteCond %{REQUEST_URI} (\.html|\.php|/)$ 
    RewriteRule $ /Layout.php [L] 
</IfModule> 
ErrorDocument 404 /404.cntnt 

這是爲了重定向PHP,HTML和擴展名的文件到佈局網頁請求,但否則返回原始文件。它沒有。請求.html.php文件將返回404響應。例如。您在url欄中輸入www.mysite.com/pageone,然後按回車鍵,您將獲得一個404,但是如果您轉到佈局頁面或它們將加載的cntnt頁面。我究竟做錯了什麼?

+0

您是否嘗試過將第二個RewriteCond合併到規則本身中? 'RewriteRule(\ .html | \ .php | /)$ /Layout.php [L]'你對我的看法很奇怪。 – IMSoP

+0

@IMSoP是的,我已經這樣做了可讀性 – DividedByZero

回答

0

對.html或.php文件的請求會返回404響應。例如。你在地址欄

進入www.mysite.com/pageone如果你正在進入www.mysite.com/pageone作爲URL,那麼它不會匹配這個條件:

RewriteCond %{REQUEST_URI} (\.html|\.php|/)$ 

它由404

你確實會可以使用這個規則:

ErrorDocument 404 /404.cntnt 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME}.php -f [OR] 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule !^(Layout\.php|.+?\.(?:jpe?g|gif|ico|png|tiff|css|js)$ Layout.php [L,NC] 
+0

這就是問題所在,我需要它將pagepage/pageone.php和/pageone.html重定向/ page.php,但不包括圖像和任何其他類型的內容。 – DividedByZero

+0

好吧現在就試試我已更改的答案。 – anubhava