2011-08-26 100 views
5

我对mod_rewrite不太好,但我现在真的需要它。RewriteRule重定向除一个文件夹以外的所有东西

我有一个名为site的文件夹中的全新网站。所以如果你需要去新的网站,URL看起来像http://domain.com/site/...。现在我需要从URL中排除site,但仍指向/site/,除了名为upload的一个文件夹。我怎样才能做到这一点?

所以http://domain.com/anything.exthttp://domain.com/anyfolder将指向http://domain.com/site/...除了domain.com/upload仍指向domain.com/upload

然后,另一个问题是,假设这只适用于临时解决方案,或者它并不重要(考虑速度和效率)?

回答

7

(假设你把规则在你的文档根.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文档。

+0

当我使用它(.htaccess代码)时,它显示内部服务器错误。我找不到什么是错的。 – Boyd

+0

当你遇到错误时,你的apache日志会说什么? ;-) – DaveRandom

+0

我的客户托管公司是在屁股疼痛。他们不支持htaccess问题,因此不想给我发送任何日志..他们确实表示他们不会限制任何htaccess功能。假设我的代码没问题,我应该继续联系托管公司,否则会出现内部服务器错误的其他原因? (不要忘记,它只显示当.htaccess包含上面的代码) – Boyd

相关问题