请求协助:仅当cms目录存在时将.html请求重写为.php(非REQUEST条件)
解决.html请求重写为.php(仅当cms目录存在时生效)
方案一:修正RewriteCond的路径判断
你之前用的RewriteCond /cms -d是按服务器系统根路径判断的,不是网站的文档根目录,所以判断逻辑出错了。改成用Apache内置变量%{DOCUMENT_ROOT}指向网站根目录,就能准确检测cms目录是否存在:
RewriteEngine On # 检测网站根目录下的cms目录是否存在 RewriteCond %{DOCUMENT_ROOT}/cms -d # 将所有.html结尾的请求重写为对应.php文件 RewriteRule ^(.*)\.html$ /$1.php [L,QSA]
方案二:用指令实现(更直观)
如果想用
RewriteEngine On <If "-d %{DOCUMENT_ROOT}/cms"> RewriteRule ^(.*)\.html$ /$1.php [L,QSA] </If>
关键说明
%{DOCUMENT_ROOT}是Apache自带的变量,对应你网站的根目录,这样判断不会受服务器系统路径干扰。- 正则表达式
^(.*)\.html$和你原来的写法效果一致,但更简洁。 [L,QSA]标记:L表示匹配这条规则后就停止后续规则处理;QSA会保留原请求的查询参数,比如article.html?cid=5会被重写成article.php?cid=5。
内容的提问来源于stack exchange,提问作者hellnow
相关产品推荐
相关产品推荐

