如何配置Rewrite规则移除.php扩展名但排除enquire子目录?
Apache Rewrite规则调整方案
针对你需要实现大部分页面移除.php扩展名,但保留enquire子目录下.php后缀的需求,调整后的Rewrite规则如下:
RewriteEngine On RewriteBase / # 1. 排除enquire目录,将带.php的URL永久重定向为无后缀(仅非enquire目录生效) RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /((?!enquire)[^.]+)\.php RewriteRule ^/?(.*)\.php$ /$1 [NC,L,QSA,R=301] # 2. 排除enquire目录,将无后缀请求内部映射到对应的.php文件(仅非enquire目录生效) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/enquire RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [L] # 3. 保留enquire目录原有规则(处理该目录下的动态请求) RewriteRule ^enquire/([0-9]+)$ contactmail.php?a=$1 [NC,L,QSA] RewriteRule ^enquire/(.*)$ contactmail.php?s=$1 [NC,L,QSA]
关键调整说明:
- 外部重定向规则:增加
(?!enquire)负向预查,确保enquire目录下的带.php URL不会被强制转为无后缀形式。 - 内部重写规则:保留
RewriteCond %{REQUEST_URI} !^/enquire条件,避免enquire目录的无后缀请求被错误映射到.php文件。 - 规则顺序优化:将重定向规则前置,避免内部重写优先触发导致逻辑混乱;同时把匹配数字参数的
enquire/([0-9]+)规则放在通用匹配规则前,确保精确请求优先匹配。
内容的提问来源于stack exchange,提问作者praveen
相关产品推荐
相关产品推荐

