.htaccess apache - 页面加载逻辑

Posted

技术标签:

【中文标题】.htaccess apache - 页面加载逻辑【英文标题】:.htaccess apache - Page loading logic 【发布时间】:2022-01-22 19:30:17 【问题描述】:

如果页面“/ua/index.html”存在,如何显示,如果不加载另一个“/index.html”。 补丁不同。

我试过这样设置,但它不起作用:

RewriteCond %REQUEST_URI ^$
RewriteCond %DOCUMENT_ROOT/ua/index.html -f
RewriteRule ^$ /ua/index.html [L]

对于主页示例:example.com - 如果存在“/ua/index.html”,则加载或不加载“/index.html”

对于其他页面示例: example.com/ua/page1.html - 如果存在“/ua/page1.html”,则加载或不加载“/index.html”

更新 3:

MrWhite 用斜线表示错误,实际上我需要这段代码,但它会创建很多重定向 ERR_TOO_MANY_REDIRECTS

RewriteRule ^ua/index.html$ / [L,R=301]

RewriteCond %REQUEST_URI ^/$
RewriteCond %DOCUMENT_ROOT/ua/index.html -f
RewriteRule .* /ua/index.html [L]

RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(ru|ua)/([^/]+).html$ /?lang=$1&tema=$2 [L]

【问题讨论】:

根据您的指令,您只请求文档根目录? @MrWhite 目录第一页,从根开始第二页 是的,但是您请求的 URL 是什么?您在浏览器中键入的 URL。 @MrWhite 我需要这个才能在主页和其他页面上工作 那么,所有个网址? //foo/bar/foo/bar 如果存在则都植根于/ua/index.html,否则/index.html?但大概像/images/myimage.jpg/styles/mydesign.css 这样的静态资源应该按原样提供? 【参考方案1】:

从您更新的问题来看,您似乎只需要一个标准的前端控制器模式?

例如,尝试以下操作(使用 mod_dir):

FallbackResource /index.html

这将允许提供任何文件(如果存在),否则,如果请求的文件不存在,它将回退到提供/index.html

例如,如果您请求 /ua/page1.html 并且它存在,那么它将被提供,否则,/index.html 将被提供。


旁白:

RewriteCond %REQUEST_URI ^$
RewriteCond %DOCUMENT_ROOT/ua/index.html -f
RewriteRule ^$ /ua/index.html [L]

检查REQUEST_URI 服务器变量的第一个条件 永远不会匹配,因为这个always 以斜杠开头。然而,这个条件无论如何都是多余的。

删除了第一个条件,如果您请求example.com/(仅根),这将提供文件example.com/ua/index.html(如果存在),这似乎不是您正在尝试的去做。

【讨论】:

这并不能解决我访问主页的问题。对于主页示例:example.com - 如果存在 "/ua/index.html" 加载它或不加载 "/index.html" 和类似于RewriteCond %REQUEST_FILENAME !-f RewriteRule ^(ru|ua)/([^/]+).html$ /?$1&$2 [L] 的 FallbackResource 我更新了 #3 帖子。

以上是关于.htaccess apache - 页面加载逻辑的主要内容,如果未能解决你的问题,请参考以下文章

apache_conf .htaccess维护页面

apache_conf 通过htaccess重写规则从暂存加载缺失的图像

apache_conf 在.htaccess中将所有页面重定向到主页

apache_conf 在.htaccess中将所有页面重定向到主页

apache_conf 在.htaccess中将所有页面重定向到主页

apache .htaccess 分布式配置文件 解读