gpt4 book ai didi

apache - 重写文件路径中的 RewriteRule 检查文件是否存在

转载 作者:行者123 更新时间:2023-12-03 21:27:54 25 4
gpt4 key购买 nike

如何使用 ModRewrite 检查缓存文件是否存在,如果存在,则重写缓存文件,否则重写动态文件。

例如,我有以下文件夹结构:

pages.php
缓存/
页数/
1.html
2.html
textToo.html
等等

您将如何为此设置 RewriteRules,以便可以像这样发送请求:

example.com/pages/1

并且如果缓存文件存在rewrite to the cache file,如果缓存文件不存在,rewrite to pages.php?p=1

它应该是这样的:(请注意,这不起作用,否则我不会问这个)

RewriteRule ^pages/([^/\.]+) 缓存/pages/$1.html [NC,QSA]
RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule cache/pages/([^/\.]+).html pages.php?p=$1 [NC,QSA,L]

我可以使用 PHP 粗略地做到这一点,但我认为必须使用 mod_rewrite 才能做到。

最佳答案

RewriteRule ^pages/([^/\.]+) cache/pages/$1.html [NC,QSA]

# At this point, we would have already re-written pages/4 to cache/pages/4.html
RewriteCond %{REQUEST_FILENAME} !-f

# If the above RewriteCond succeeded, we don't have a cache, so rewrite to
# the pages.php URI, otherwise we fall off the end and go with the
# cache/pages/4.html
RewriteRule ^cache/pages/([^/\.]+).html pages.php?p=$1 [NC,QSA,L]

关闭 MultiViews 也很重要(如果您启用了它们)。
Options -MultiViews

否则初始请求 (/pages/...) 将在 mod_rewrite 启动之前自动转换为/pages.php。您也可以将 pages.php 重命名为其他名称(并更新最后的重写规则)以避免多 View 冲突。

编辑:我最初包括 RewriteCond ... !-d但它是无关紧要的。

关于apache - 重写文件路径中的 RewriteRule 检查文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/470880/

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