我已经完成了一些代码,以便将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>