多个 RewriteConds / RewriteRules 取决于单个规则目标的文件存在
Multiple RewriteConds / RewriteRules depending on file existence of single rule targets
我目前正在一个静态网站上工作,我需要将最后一个 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 集群中的 liveliness-checks,我只是把它放在那里因为我不能 100% 确定它不是罪魁祸首。
我试图以 if > else if > else if > else
的方式将多个 RewriteCond
和 RewriteRule
链接在一起,但这似乎在某些时候失败了。不幸的是,这些错误调试起来非常棘手,因为除了浏览器 404
-error 之外,没有任何迹象表明发生了什么。目前,只有现有文件和默认页面的规则可以正常工作。对我做错的任何帮助将不胜感激!
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .? - [L]
<files probe.json>
order allow,deny
allow from all
</files>
RewriteCond pages/.html -f
RewriteRule ^(.*)$ pages/.html [NC,L]
RewriteCond pages/.html -f
RewriteRule ^(.*(?=[/]))/(.*)$ pages/.html?id= [NC,L]
RewriteRule ^$ pages/home.html [L]
我找到了这个问题的解决方案。
我不得不使用绝对路径。
我必须在条件前面添加 %{DOCUMENT_ROOT}
。
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/.html -f
RewriteRule ^(.*)$ /pages/.html [NC,L]
RewriteCond %{DOCUMENT_ROOT}/pages/.html -f
RewriteRule ^(.*(?=[/]))/(.*)$ /pages/.html?id= [NC,L]
RewriteRule ^$ /pages/home.html [L]
我目前正在一个静态网站上工作,我需要将最后一个 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 集群中的 liveliness-checks,我只是把它放在那里因为我不能 100% 确定它不是罪魁祸首。
我试图以 if > else if > else if > else
的方式将多个 RewriteCond
和 RewriteRule
链接在一起,但这似乎在某些时候失败了。不幸的是,这些错误调试起来非常棘手,因为除了浏览器 404
-error 之外,没有任何迹象表明发生了什么。目前,只有现有文件和默认页面的规则可以正常工作。对我做错的任何帮助将不胜感激!
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .? - [L]
<files probe.json>
order allow,deny
allow from all
</files>
RewriteCond pages/.html -f
RewriteRule ^(.*)$ pages/.html [NC,L]
RewriteCond pages/.html -f
RewriteRule ^(.*(?=[/]))/(.*)$ pages/.html?id= [NC,L]
RewriteRule ^$ pages/home.html [L]
我找到了这个问题的解决方案。
我不得不使用绝对路径。
我必须在条件前面添加
%{DOCUMENT_ROOT}
。
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/.html -f
RewriteRule ^(.*)$ /pages/.html [NC,L]
RewriteCond %{DOCUMENT_ROOT}/pages/.html -f
RewriteRule ^(.*(?=[/]))/(.*)$ /pages/.html?id= [NC,L]
RewriteRule ^$ /pages/home.html [L]