Htaccess索引文件,如果存在

时间:2016-12-14 11:06:14

标签: php apache .htaccess

我需要这样一个.htaccess文件,它允许我通过扩展(图像)直接访问某些文件,并且在任何其他情况下它检查是否存在entryPoint2.php,如果存在,则执行该文件,如果不存在,则执行entryPont.php。这是我到目前为止所做的:

Options +FollowSymLinks
Options -Indexes

RewriteEngine On
RewriteCond %{REQUEST_URI} !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.ico|\.flv|\.mpeg|\.mp4|\.mp3|\.swf)$
RewriteCond %{REQUEST_URI} !^/forum
RewriteCond %{REQUEST_URI} !^/assets/downloads
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/entryPoint2.php -f
RewriteRule ^(.*)$ entryPoint2.php [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ entryPoint.php [QSA]
RewriteRule ^robots\.txt$ http://www.example.com [R,NE,L]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST} [L,R=301]
<Files .htaccess>
Order Allow,Deny
Deny from All
</Files>

图片有效,但我得到禁止&#34;错误,它寻找index.php

1 个答案:

答案 0 :(得分:1)

你的要求结果比我最初想的要简单。 你需要的是一个白名单和一个简单的文件检查。

这应该做:

RewriteEngine on
RewriteRule \.(png|jpg|gif|jpeg|bmp|ico|flv|mpeg|mp4|mp3|swf)$ - [L]
RewriteCond %{DOCUMENT_ROOT}/entryPoint2.php -f
RewriteRule ^ entryPoint2.php [L]
RewriteRule ^ entryPoint.php

逐行说明:

  • 第1行是不言自明的。
  • 第2行是基于扩展名的列表。 它使Apache服务文件立即与这些扩展名匹配,忽略了.htaccess的其余部分。
  • 第3行检查entryPoint2.php是否存在。 例如,如果DOCUMENT_ROOT/foo/bar,则会检查/foo/bar/entryPoint2.php是否存在。
  • 如果第3行评估为true,则第4行将提供entryPoint2.php,忽略.htaccess的其余部分。
  • 第5行为entryPoint.php提供任何其他案例。

你去。