Apache 重写规则重定向除一个文件夹外的所有内容

Apache 重写规则重定向除一个文件夹外的所有内容,apache,mod-rewrite,Apache,Mod Rewrite,我不太擅长mod_重写,但我现在真的需要它 我把整个新网站放在一个名为site的文件夹中。因此,如果您需要访问新网站,URL将看起来像http://domain.com/site/...。现在我需要从URL中排除站点,但仍然将其指向/site/,除了一个名为上传的文件夹。我该怎么做 所以http://domain.com/anything.ext和http://domain.com/anyfolder将指向http://domain.com/site/...除了domain.com/upload

我不太擅长mod_重写,但我现在真的需要它

我把整个新网站放在一个名为
site
的文件夹中。因此,如果您需要访问新网站,URL将看起来像
http://domain.com/site/...
。现在我需要从URL中排除
站点
,但仍然将其指向
/site/
,除了一个名为
上传
的文件夹。我该怎么做

所以
http://domain.com/anything.ext
http://domain.com/anyfolder
将指向
http://domain.com/site/...
除了
domain.com/upload
之外,它仍然指向
domain.com/upload

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

(假设您将规则放在文档根目录的.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_重写效率非常低,尤其是在繁忙的服务器上,因为它必须在每个传入请求上运行至少一个正则表达式。您应该始终使用
[L]
标志,以确保处理的规则不超过需要的数量

当应用程序引用目录时,以同样的方式构造目录总是更有效的。上面这些应该可以让你工作,但不要让它停留太久


我相信您已经知道这一点,但这是mod_rewrite文档。

当我使用它(.htaccess代码)时,它显示了一个内部服务器错误。我找不到问题所在。我的客户托管公司是个麻烦事。他们不支持htaccess问题,因此不想给我发送任何日志。。他们说他们没有限制任何htaccess功能。假设我的代码没有问题,我应该继续联系托管公司,或者可能是内部服务器错误的另一个原因吗?(别忘了它只在.htaccess包含上面的代码时显示)如果您尝试通过在URL中包含
/site
来访问,它是否有效?如果没有,请删除/重命名.htaccess文件并尝试。。。基本上,在我们使用mod_rewrite之前,只是想确保你的网站能够正常运行。。。