首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个RewriteConds / RewriteRules取决于单个规则目标的文件存在性

多个RewriteConds / RewriteRules取决于单个规则目标的文件存在性
EN

Stack Overflow用户
提问于 2022-04-24 09:34:10
回答 1查看 12关注 0票数 0

我目前正在一个静态网站上工作,在那里我需要将最后一个URI元素作为查询参数传递到某些页面上,

我所有的静态html页面都在/pages/**/*目录中,其中的路径与最终网站上所需的路径直接相关。这意味着/products/kitchen需要显示/pages/products/kitchen.html。在本例中,如果文件/pages/products/kitchen.html不存在,我将尝试/pages/products.html,并将kitchen作为名为id (?id=kitchen)的查询参数传递。/assets目录中存在静态资产,因此不应该将存在的文件重写到/pages目录中。如果没有请求的路径,我想重定向到默认主页。probe.json规则用于在kubernetes集群中进行生动活泼检查,我只是将其保存在其中,因为我无法100%确定它不是罪魁祸首。

我试图以一种RewriteCond方式将多个RewriteRuleif > else if > else if > else连接在一起,但这似乎在某种程度上失败了。不幸的是,这些错误很难调试,因为除了浏览器404-error之外,没有任何迹象显示正在发生什么。目前,只有现有文件和默认页的规则才能正常工作。任何帮助,我正在做的错事,将不胜感激!

代码语言:javascript
复制
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .? - [L]

<files probe.json>
    order allow,deny
    allow from all
</files>

RewriteCond pages/$1.html -f
RewriteRule ^(.*)$ pages/$1.html [NC,L]

RewriteCond pages/$1.html -f
RewriteRule ^(.*(?=[/]))/(.*)$ pages/$1.html?id=$2 [NC,L]

RewriteRule ^$ pages/home.html [L]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-24 10:29:39

我找到了解决这个问题的办法。

  1. I必须使用绝对路径。

  1. I必须添加条件的%{DOCUMENT_ROOT}

代码语言:javascript
复制
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .? - [L]

<files probe.json>
    order allow,deny
    allow from all
</files>

RewriteCond %{DOCUMENT_ROOT}/pages/$1.html -f
RewriteRule ^(.*)$ /pages/$1.html [NC,L]

RewriteCond %{DOCUMENT_ROOT}/pages/$1.html -f
RewriteRule ^(.*(?=[/]))/(.*)$ /pages/$1.html?id=$2 [NC,L]

RewriteRule ^$ /pages/home.html [L]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71987134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档