Apache mod_rewrite 适用于除 root 之外的所有内容
您好,我正在尝试编写 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 错误。
谢谢
Hi I am trying to write a mod_rewrite rule to redirect everything except the root folder.
For example, www.example.com should load the index.html file
For everything else, e.g. www.example.com/tag, the /tag should be passed to a script in a subdirectory
Right now I have
RewriteCond %{REQUEST_URI} !^/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) app/webroot/$1 [L]
And that loads index.html fine but the /tag is not passed to webroot. I'm getting a 404 error.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这种情况就是问题所在:
您所说的任何以“/”开头的内容都不会被重写,并且所有内容都以“/”开头。您需要在最后使用
$
:不过,我不确定您是否需要该规则,因为如果 index.html 存在,其他两个规则将自动处理该问题。只需使用它们来重写任何物理上不存在的内容:
并且您可以在应用程序中处理 404 错误,因为无论如何您都必须处理子目录。
This condition is the problem:
You're saying anything that starts with '/' is not rewritten, and everything begins with '/'. You need to use
$
at the end:I'm not sure you need the rule at all, though, because if index.html exists the other two rules will take care of that automatically. Just use these to rewrite anything that doesn't physically exist:
And you can handle a 404 error in your app, since you'll have to for the subdirectories anyway.