2017-10-10 127 views
0

我有兩個單獨的.htaccess文件,我想融合在一起,以便第一次重寫總是優先,重定向一些流量到https基地哪個域。然後,如果URL中的文件不存在,那麼它會將流量發送到一個php文件。它是一個URL縮短器,但是如果在404處返回,那麼它將顯示一個404錯誤頁面。.htacess執行重寫如果文件不存在

下面是.htaccess文件的點點滴滴:

此,下面,我認爲應該只是kore.tt所有的HTTP流量和korett.com重定向到https:

RewriteEngine on 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} !^(www\.)?(kore\.tt|korett\.com) [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301] 

這從URL縮短東西,應該發送一個不存在於loader.php

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ /loader.php [L] 
</IfModule> 

但隨後如果返回404錯誤的流量。那麼這是簡單的404錯誤捕獲。

ErrorDocument 404 /404.html 
+2

你'的ErrorDocument 404'永遠不會執行,因爲你的重寫規則是轉發所有非文件及非目錄'loader.php' – anubhava

回答

0

你可以在你的htaccess中使用一個條件。創建規則的方法有很多。看看這可以爲你工作。

#check to see if loader.php exists on the filesystem, then do rewrite 
    <If "-f %{DOCUMENT_ROOT} . '/loader.php'"> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^.*$ /loader.php [L] 
    </If> 
    #otherwise redirect to 404 page 
    <Else> 
    RewriteEngine On 
    RewriteRule^/404.html [R=404,L] 
    </Else> 
+0

但OP要返回一個404頁當URL縮短服務(即'loader.php')無法找到該文件。 (這需要從'loader.php'中生成,而不是在'.htaccess'中生成。)如果你只是想在'loader.php'不存在時返回404'ErrorDocument',那麼你不必做任何事 - OPs代碼應該按原樣工作。 – MrWhite

+1

也許會被誤解。他的措辭我認爲,如果loader.php不存在,然後做一個404。我沒有測試代碼,但它似乎會創建一個重定向循環,因爲重寫將不存在的文件重定向到如果loader.php丟失,則不存在文件。 –

+0

啊,是的,如果'/ loader.php'不存在,那麼你對OP代碼的重寫循環是正確的。然而,這個重寫循環可以通過簡單地刪除'RewriteRule' _susbstitution_上的斜槓前綴來避免。即。 'loader.php'而不是'/ loader.php'。然後,mod_rewrite能夠檢測到請求正在被自己重寫並阻止進一步的重寫,從而允許錯誤文檔被提供。 – MrWhite