url伪静态下静态文件同时存在,优先访问真实静态文件的办法
伪静态是个好东西,可以让我们的url更加“人性化”,比如我的博客,url全是“英文+html”形式,看上去比php动态文件好看而且富有意义多了。
可是作为一个大型网站,如果整站全用伪静态的话,访问量一上去,服务器就会无比吃力。有钱买硬件做负载还好,没钱的站长朋友该怎么解决呢?聪明的你肯定想到办法了,对:伪静态+静态。
也许你会问,为什么要同时使用呢?为何不直接全静态呢?有的时候,我们程序本身不支持生成静态,或者我们不想让网站目录下出现太多文件,方便管理等等原因,我们需要用到伪静态,下面讲讲实现的办法吧!
以下办法经过测试,可以放心使用:
# 如果真实文件存在则优先访问,而不是伪静态到php文件
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
# 跳转到真实的静态文件
RewriteCond %{REQUEST_FILENAME}.phtml -f
RewriteRule ^(.*)$ $1.html [S=1]
# 如果不存在真实文件则伪静态
RewriteCond %{ENV:WasHTML} ^yes$
RewriteRule ^(.*)$ $1.html
网上给出的通用办法如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [S=1]
#如果存在xx.html,直接读取
RewriteCond %{ENV:WasHTML} ^yes$
RewriteRule ^(.*)$ $1.php
#如果不存在xx.html直接转向至xx.php
</IfModule>