2017-10-10 25 views
0

2つの別々の.htaccessファイルがあります。最初の書き換えが常に優先され、いくつかのトラフィックがhttpsベースのドメインにリダイレクトされます。 URLにあるファイルが存在しない場合は、トラフィックをphpファイルに送信します。これはURLの短縮文字ですが、404に戻ると、404エラーページが表示されます。ここでファイルが存在しない場合に.htacessを実行する

は、.htaccessファイルのこまごまとしている:

これ、以下、私はhttpsにkore.ttとkorett.comを除くすべてのHTTPトラフィックをリダイレクトする必要があると考えている:

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

この

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

しかし、それは404エラーを返した場合をloader.phpするために存在していないトラフィックを送信することになっているURL短縮から何かです。次に、これは単純な404エラーキャッチです。

ErrorDocument 404 /404.html 
+2

あなたのご書き換えルールが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がURL短縮サービス(返される404ページを望んでいるので、'のErrorDocument 404'が実行されることはありませんつまり、 'loader.php')がファイルを見つけられません。 (これは '.htaccess'ではなく、' loader.php'から生成する必要があります。) '' loader.php'が存在しないときに '' ErrorDocument''を返すだけなら、何かをする - OPコードはそのまま動作するはずです。 – MrWhite

+1

誤解されるかもしれません。彼が言いましたが、loader.phpが存在しない場合は404を実行しました。私はコードをテストしていませんが、既存のファイル以外のファイルをリダイレクトしてリダイレクトループを作成するように見えますloader.phpが見つからなかった場合は存在しないファイルです。 –

+0

ああ、 '/ loader.php'が存在しない場合、OPのコードを使ったリライトループについては正しいです。しかし、このリライトループは、この例では 'RewriteRule' _susbstitution_のスラッシュプレフィックスを削除するだけで回避できます。すなわち、 '/ loader.php'ではなく' loader.php'です。 mod_rewriteは、要求が自身に書き換えられていることを検出し、それ以上の書き換えを防ぎ、エラー文書を提供できるようにします。 – MrWhite

関連する問題