gpt4 book ai didi

apache - 使用 RewriteCond 模拟 2 级 If-Else

转载 作者:行者123 更新时间:2023-12-04 19:21:46 24 4
gpt4 key购买 nike

我正在尝试了解 RewriteCond,并希望将任何请求重写为静态 html 页面(如果存在)或特定的 index.php(只要请求的文件不存在)。

为了说明逻辑:

if HTTP_HOST is '(www\.)?mydomain.com'
if file exists: "/default/static/{REQUEST_URI}.html", then
rewrite .* to /default/static/{REQUEST_URI}.html
else if file exists: {REQUEST_FILENAME}, then
do not rewrite
else
rewrite .* to /default/index.php

当我不需要测试 HTTP_HOST 时,我似乎没有太多麻烦。最终,这个 .htaccess 文件将处理对多个域的请求。

我知道我可以用虚拟主机解决这个问题,但我想弄清楚如何以这种方式做到这一点。

我对其他一些标志不太熟悉,它们中的任何一个在这里有用吗(如chain|C、next|N 或skip|S)?

提前致谢!

更新:我已经设法做到了,但希望有其他选择:
RewriteCond %{HTTP_HOST} ^(domainA|domainB)\..* [NC]
RewriteCond %{DOCUMENT_ROOT}/%1/static/%{REQUEST_URI}.html -f
RewriteRule (.*)? /%1/static/$1.html [NC,L]

RewriteCond %{HTTP_HOST} ^(domainA|domainB)\..* [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /%1/index.php [L,QSA]

更新 #2:在 Gumbo 的回答的帮助下,想出了另一个。我喜欢在添加域的情况下这将需要较少的维护。 (谢谢秋葵!)

有什么原因我不应该设置 ENV 变量吗?
RewriteCond %{HTTP_HOST} ^(domainA|domainB)\..*$ [NC]
RewriteRule ^ - [E=APP:%1]

RewriteCond %{DOCUMENT_ROOT}/%{ENV:APP}/static/%{REQUEST_URI}.html -f
RewriteRule (.*)? /%{ENV:APP}/static/$1.html [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /%{ENV:APP}/index.php [L,QSA]

最佳答案

我可能会这样做:

RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$
RewriteRule ^ - [S=2]

RewriteCond %{DOCUMENT_ROOT}/default/static%{REQUEST_URI}.html -f
RewriteRule !^default/static/ default/static%{REQUEST_URI}.html [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^default/static/ default/index.php [L]

这类似于您更新的示例。除了第一条规则在宿主不合适的情况下会跳过下面两条规则。和 RewriteRule模式排除任何以 /default/static/ 开头的路径.不过你的规矩已经很不错了。

关于apache - 使用 RewriteCond 模拟 2 级 If-Else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2833004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com