.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中将所有页面重定向到主页