.htaccess在文件夹名称

时间:2015-05-28 00:00:28

标签: php apache .htaccess mod-rewrite

我有以下.htaccess:

RewriteEngine On
RewriteBase /sandbox/

RewriteRule ^(assets)($|/) - [L]

RewriteRule ^(.*)$ lib/script/bootstrap.php?route=$1.php [NC,L,QSA]

我正在做的是将所有请求(我的资产除外 - img,css,js)重定向到我的引导脚本,该脚本将通过 route 参数处理请求,该参数包括URL请求

这种方法在大多数情况下都能正常工作,除非我有一个电话,例如:

http://www.example.com/sandbox/admin ,其中admin是我目录中存在的文件夹,以及其他文件夹。此文件夹包含可访问的各种页面,以及 index.php 文件,默认情况下,我的bootstrap.php路由会将请求从上述URL重定向到该文件。

我的问题是,当我尝试点击页面时: http://www.example.com/sandbox/admin ,我的htaccess(据我所知)正在将可见网址重写为 {{3} } ,这不是很漂亮。我相信它是因为上面的URL是一个指向我的/ admin /文件夹的有效URL,但是我希望我的.htaccess忽略这一点并发送此aswell,因此会发生一些冲突。到我的bootstrap.php(我的.htaccess的第4行)。我做错了什么?

以下是我的浏览器中的请求:

enter image description here

更新

奇怪的是, http://www.example.com/sandbox/admin/?route=admin.php 工作正常,但不是 http://www.example.com/sandbox/admin/ (请注意尾随斜杠)。

1 个答案:

答案 0 :(得分:0)

如果您有真正的文件夹,则需要使用条件来忽略real个文件和文件夹。所有其他请求将被路由到您的引导程序文件。 (如果我理解你的问题。)

RewriteEngine On
RewriteBase /sandbox/

RewriteRule ^(assets)($|/) - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ lib/script/bootstrap.php?route=$1.php [NC,L,QSA]