如果文件和文件类型存在,则仅忽略htaccess规则

时间:2016-11-26 20:12:34

标签: .htaccess

我已经完成了一些代码,以便将url传递到索引页面,然后索引页面决定加载哪个页面。最初它会重定向,除非存在文件或目录,这对于大多数情况都很好,但像我希望保密的php文件之类的东西,因为它们只应该被index.php引用,而不是实际上自己调用。

通过一些帮助,我设法切换它,以便除了某些扩展名(如图像和css文件)之外,它会重定向所有内容。我只是注意到它仍会尝试处理不存在的文件,并提出默认的404页面,但我更喜欢将它传递给我的代码,例如所有其他页面。

如何合并这两个规则,以便只有在文件存在且允许其扩展名的情况下才会发生重定向?

1. RewriteCond %{REQUEST_FILENAME} !-f
2. RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|txt|php|bmp|png|ico|tiff|css|js)$

以下是旧规则(特定于重定向):

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_page_location=$1 [L,NC,NE]

这就是目前的情况:

Options -Indexes
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L,NC]

# Add trailing slash to directories
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

# If the request is not for known file types
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|txt|php|bmp|png|ico|tiff|css|js)$

RewriteRule .* index.php?_page_location=$0 [L,QSA]

<FilesMatch "^(.*)\.php$">
    Order Deny,Allow
    Deny from all
</FilesMatch>
<FilesMatch "index\.php|info\.php">
  Order allow,deny
  Allow from all
</FilesMatch>

0 个答案:

没有答案