今天调试网站时,遇到一个问题,因为新开发的M站是PHP的,使用了伪静态,而由于一些网页是静态的,因此产生了伪静态和本地文件冲突的问题,也就是一个优先级问题,例如把网站url伪静态成 /veryhuo/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的解决方案:
注意上边的两条红色代码,就是解决这个问题的,按照上边逻辑规则,加入到web.config中即可。另外,您还可以在IIS7可视化工具,直接这样操作:
第一步,打开IIS管理器,找到对应站点,再点击【URL重写】,双击要操作规则,并点击【条件】,选【全部匹配】,【添加】条件
第二步,如下图,在【条件输入】的位置,输入【{REQUEST_FILENAME}】,并下拉选择【检查输入字符串是否】,选择‘不是文件’和‘不是目录’(分两次添加)