晚上,
我正在运行以下文件:
/家庭/用户/网络/网站/ gubbinz /
Web服务器根目录是Web /
当我加载网址时:localhost / sites / gubbinz / index.php?request = home.html
我想查看是否有文件./sites/gubbinz/cache/home.html
我可以使用以下方法解决此问题:
RewriteCond %{QUERY_STRING} ^request=(.*) [NC]
RewriteCond /home/user/Web/sites/gubbinz/cache/home.html -f
RewriteRule ^.+$ cache/%1 [QSA,L]
但不是这样的:
RewriteCond %{QUERY_STRING} ^request=(.*) [NC]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}cache/home.html -f
RewriteRule ^.+$ cache/%1 [QSA,L]
我更喜欢后者,因为这意味着我可以为localhost和live提供一条规则。有谁知道我哪里出错了?
N.B。我没有设置RewriteBase。
答案 0 :(得分:1)
经过一番摆弄后,这是我能想到的最好的服务器,可以跨服务器运行,而不需要多个服务器条件:
RewriteCond %{SCRIPT_FILENAME} ^(.+)\/index.php$ [NC]
RewriteRule .* - [E=PATH:%1]
RewriteCond %{QUERY_STRING} ^request=(.*) [NC]
RewriteCond %{ENV:PATH}/cache/%1.html -f
RewriteRule ^.+$ cache/%1.html [QSA,L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^.+$ index.php?request=$0 [QSA,L]
第一部分获取请求来自的目录的完整路径,并将其保存为环境变量。 index.php从末尾开始修剪。
第二部分获取包含实际加载的URL的内部重定向,检查是否存在HTML的缓存版本以及是否执行内部重定向。
第三部分采用“搜索引擎友好URL”并进行内部重定向到index.php?request = {URL}。
简而言之,您加载了网址:
http://domain.com/page/sub-page
第三个条件设置将其重定向到:
http://domain.com/index.php?request=page/sub-page
然后第二组(在第一条规则中设置了env.var。)看到服务器上是否存在./cache/page/sub-page.html;如果是,则该页面将显示在浏览器中。
N.B。对于任何可能发现使用第三个条件集不是必需的人,你可以用两个规则来做到这一点。我使用重定向到index.php?request = 555作为我的PHP处理的一部分。