【问题标题】:.htaccess apache - Page loading logic.htaccess apache - 页面加载逻辑
【发布时间】: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 这样的静态资源应该按原样提供?

标签: apache .htaccess


【解决方案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 帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多