静态HTML与伪静态的访问优先级问题

博主:jhchinajhchina 2023-05-30 270 0条评论
摘要: 今天调试网站时,遇到一个问题,因为新开发的M站是PHP的,使用了伪静态,而由于一些网页是静态的,因此产生了伪静态和本地文件冲突的问题,也就是一个优先级问题,例如把网站url伪静态成...

今天调试网站时,遇到一个问题,因为新开发的M站是PHP的,使用了伪静态,而由于一些网页是静态的,因此产生了伪静态和本地文件冲突的问题,也就是一个优先级问题,例如把网站url伪静态成 /jianghu/1234.html,而本地路径正好存在这个文件的话,Web服务器会优先访问伪静态,如果伪静态被判断404,则导致无法访问到本地文件。

经常一番研究,发现:添加2行规则可解决这个问题。

RewriteCond %{REQUEST_FILENAME} !-d

#上面的意思是不存在此目录时执行

RewriteCond %{REQUEST_FILENAME} !-f

#上面的意思是不存在此文件时执行

下面的是在.htaccess 中的应用,这2句应该在httpd.ini 中也适用

RewriteEngine On RewriteBase /

#将下面2行复制到你的规则前面

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php\?$1 [QSA,PT,L]

再说一下IIS7的解决方案:

第一步,打开IIS管理器,找到对应站点,再点击【URL重写】,双击要操作规则,并点击【条件】,选【全部匹配】,【添加】条件

t515zgs3ebc.png

第二步,如下图,在【条件输入】的位置,输入【{REQUEST_FILENAME}】,并下拉选择【检查输入字符串是否】,选择‘不是文件’和‘不是目录’(分两次添加)

qoao3d34fnh.png