【问题标题】:Apache mod_rewrite for everything except rootApache mod_rewrite 用于除 root 之外的所有内容
【发布时间】:2011-03-26 04:03:39
【问题描述】:

您好,我正在尝试编写一个 mod_rewrite 规则来重定向除根文件夹之外的所有内容。 例如,www.example.com 应该加载 index.html 文件 对于其他一切,例如www.example.com/tag,/tag 应该传递给子目录中的脚本

我现在有

RewriteCond %{REQUEST_URI} !^/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) app/webroot/$1 [L]

这可以很好地加载 index.html,但 /tag 没有传递给 webroot。我收到 404 错误。

谢谢

【问题讨论】:

  • 如果将重写规则更改为 RewriteRule (.*) http://yourdomain.com/app/webroot/$1 [L,R] 重定向到的 URL 是什么?跨度>

标签: apache .htaccess mod-rewrite


【解决方案1】:

这个条件就是问题所在:

RewriteCond %{REQUEST_URI} !^/

您是说以“/”开头的任何内容都不会被重写,并且所有内容都以“/”开头。最后需要使用$:

RewriteCond %{REQUEST_URI} !^/$

不过,我不确定您是否需要该规则,因为如果 index.html 存在,其他两个规则将自动处理该问题。只需使用这些来重写任何实际不存在的东西:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ app/webroot/$1 [L,QSA]

而且您可以在应用中处理 404 错误,因为无论如何您都必须处理子目录。

【讨论】:

  • 完美!太感谢了!为了弄清楚这一点,我已经敲了 4 个小时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2021-11-21
  • 2010-09-24
  • 1970-01-01
相关资源
最近更新 更多