0

我应该设置什么规则,以使 mod_rewrite 完全忽略目录“public”?我的意思是,文件应该可以在其中访问,但如果文件不存在,服务器错误页面应该会出现类似“禁止”或“未找到文件”之类的信息。我不需要自定义错误页面或类似的东西。我只是想让“公众”表现得像根本没有 mod_rewrite 一样。

这是我的 .htaccess 文件:

RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

我的文件结构是

/system/
/application/
/public/

我希望文件夹 public 的行为,就像根本没有设置重写规则一样,完全忽略它。

编辑

那是我的 .htaccess 文件:

RewriteEngine on

RewriteRule ^(public)($|/) - [L,NC]

RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

我已经在 /public/ 文件夹中有这个 .htaccess :

RewriteEngine off

我已经尝试了上面所有不同的答案(以及来自谷歌的大量答案)。我试着把它们混在一起。

我的文件夹:

/system/
/application/
/public/ 
/public/.htaccess #RewriteEngine off
/public/favicon.ico
/index.php

以下是我得到的结果的网址:

/public/favicon.ico -> I get the favicon
/public/faviDon.ico -> I get the index.php (without mod rewrite you would get "not found")
/public/ -> I get the index.php (without mod rewrite "forbidden")

因此,如果找不到文件或直接访问文件夹,它仍然会重写 url。

你能看到吗?

非常感谢你们的努力!对此,我真的非常感激!

4

1 回答 1

3

编辑

我在我的机器上完全设置了你的文件

//  /.htaccess

RewriteEngine on

RewriteRule ^(public)($|/) - [L,NC]

RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

公共文件夹中的 .htaccess:

//  /public/.htaccess

Options -Indexes
RewriteEngine off

这会禁用您想要的重写。

/public/                 -> 403 Forbidden
/public/favicon.ico      -> 200 File found
/public/not-existing.ext -> 404 File not found

您的公共文件夹中有 index.php 吗?也许你可以删除那个..

你在什么机器上测试?

我在 Linux + Apache 2 + PHP5.3 上测试过

我可以在下午给你更多的支持(我的时间+2 GMT)

编辑 2

当我从 /.htaccess 中删除此行时仍然有效

RewriteRule ^(public)($|/) - [L,NC]

一切都由公用文件夹中的 .htaccess 处理。

也许这是您浏览器中的缓存问题。尝试不同的浏览器/清理历史记录/安装应用程序以删除缓存..(取决于您使用的浏览器)

于 2013-01-23T21:09:47.727 回答