在我的网站上,当我访问my-site.com/css或my-site.com/js等网址时,浏览器会显示文件夹列表,而不是保存在数据库中的实际页面。如果我在我的htaccess中使用Options All -Indexes
那么它就是禁止的。我在htaccess中有以下规则来加载任何动态页面:
RewriteRule ^(.*)$ page.php?url=$1 [QSA,L]
由于我的项目中还有名为css和js的文件夹,所以我认为服务器显示目录内容而不是动态页面。我该如何防止这种冲突。我知道我是否使用了后缀" page"在我的页面名称之前,它可以整理出来,但我不想在页面网址之前使用任何参数。
修改
这是我完整的htaccess文件:
# my-site.com
Options +FollowSymlinks -MultiViews
#RewriteBase /
#Enable mod rewrite
RewriteEngine On
DirectorySlash off
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ page.php?category=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/([^/]+)$ page.php?category=$1&post=$2 [QSA,L]
答案 0 :(得分:1)
由于/js
和/css
是真实目录,因此您的重写规则不会执行,因为您有这样的条件:
RewriteCond %{REQUEST_FILENAME} !-d
表示不运行目录。
您可以将.htaccess调整为:
Options +FollowSymlinks -MultiViews
RewriteEngine On
# add a trailing slash to directories
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule !/$ %{REQUEST_URI}/ [L,R=302]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ page.php?category=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)/?$ page.php?category=$1&post=$2 [QSA,L]