RewriteRule重定向除一个文件夹以外的所有内容

时间:2011-08-26 09:42:07

标签: apache mod-rewrite

我对mod_rewrite不是很好,但我现在真的需要它。

我将全新网站放在名为site的文件夹中。因此,如果您需要访问新网站,网址将显示为http://domain.com/site/...。现在,我需要从网址中排除site,但仍然会将其指向/site/除以外的一个名为upload的文件夹。我怎么能这样做?

所以http://domain.com/anything.exthttp://domain.com/anyfolder会指向http://domain.com/site/...,但domain.com/upload仍然指向domain.com/upload

那么另一个问题是,假设这只适用于临时解决方案,或者它是否真的重要(考虑速度和效率)?

1 个答案:

答案 0 :(得分:10)

(假设您将规则放在文档根目录中的.htaccess文件中)使用:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^upload
RewriteRule (.*) site/$1 [L]

如果你把它放到httpd.conf中,你需要稍微改一下:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/upload
RewriteRule (.*) /site$1 [L]

关于第二个问题,我个人不喜欢mod_rewrite,除非你绝对必须,否则肯定不会将它作为永久解决方案。这是因为mod_rewrite效率很低,特别是在繁忙的服务器上,因为它必须在每个传入的请求上运行至少一个正则表达式。您应该始终使用[L]标志来确保不再处理超出必要的规则。

以与应用程序引用它们相同的方式构建目录总是更有效。以上应该让你工作,但尽量不要让它保持太长时间。

我确定你已经知道了,但是here是mod_rewrite文档。