【问题标题】:RewriteRule redirect everything except one folderRewriteRule 重定向除一个文件夹之外的所有内容
【发布时间】:2011-08-26 09:42:06
【问题描述】:

我对 mod_rewrite 不太擅长,但我现在真的需要它。

我将整个新网站放在一个名为 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

然后另一个问题是,假设这仅适用于临时解决方案还是真的不重要(考虑速度和效率)?

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    (假设您将规则放在文档根目录的 .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 文档。

    【讨论】:

    • 当我使用它(.htaccess 代码)时,它显示一个内部服务器错误。我找不到问题所在。
    • 我的客户托管公司很麻烦。他们不支持 htaccess 问题,因此不想给我发送任何日志。他们确实说他们没有限制任何 htaccess 功能。假设我的代码没问题,我应该继续联系托管公司,或者是否还有其他原因导致内部服务器错误? (别忘了它只在 .htaccess 包含上面的代码时显示)
    • 如果您尝试通过在 URL 中包含 /site 来达到目标​​,它是否有效?如果没有,请删除/重命名 .htaccess 文件并尝试...基本上只是在我们使用 mod_rewrite 之前确保您的网站确实有效...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2014-01-16
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多