.htacess如果文件不存在则执行重写

时间:2017-10-10 16:52:16

标签: .htaccess redirect mod-rewrite

我有两个单独的.htaccess文件,我希望将它们融合在一起,以便第一次重写始终优先,将某些流量重定向到https base哪个域。然后,如果url上的文件不存在,那么它将流量发送到php文件。它是一个url shortener,但是如果它返回404,那么它会显示404错误页面。

以下是.htaccess文件的各个部分:

下面,我认为应该将除kore.tt和korett.com之外的所有http流量重定向到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 shortener的东西,它应该将不存在的流量发送到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

1 个答案:

答案 0 :(得分: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>