如何修改.htaccess:排除admin.php,仅将其他PHP页重定向到HTML
解决方法
以下是调整后的.htaccess配置,可同时实现非www转www、HTTP转HTTPS,且仅对index.php、product1.php、product2.php、product3.php执行PHP转HTML的重定向,排除admin.php:
# 开启URL重写引擎 RewriteEngine On # 强制跳转到HTTPS + www域名 RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 外部重定向:直接访问.php文件时(排除admin.php),跳转到对应的.html RewriteCond %{REQUEST_URI} !^/admin\.php$ [NC] RewriteCond %{THE_REQUEST} \s/+(.*?)\.php[\s?] [NC] RewriteRule ^ /%1.html [L,R=301] # 内部重写:访问.html文件时(排除admin.html),实际加载对应的.php RewriteCond %{REQUEST_URI} !^/admin\.html$ [NC] RewriteRule ^([^/]+)\.html$ $1.php [L]
关键规则说明
- 强制HTTPS + www:通过两个
RewriteCond判断是否为HTTP或非www域名,匹配后统一跳转到https://www.xxx.com,[L,R=301]表示永久重定向并终止后续规则。 - 排除admin.php的外部跳转:第一条
RewriteCond用!^/admin\.php$排除对admin.php的匹配;第二条RewriteCond匹配原始请求行(%{THE_REQUEST}),确保仅对用户直接访问.php文件的情况进行跳转,避免内部重写导致的循环问题。 - 排除admin.html的内部重写:用
!^/admin\.html$排除对admin.html的内部映射,保证访问admin.php时直接加载该文件,不会被重写或跳转。
注意事项
- 确保服务器开启了
mod_rewrite模块; - 替换原有PHP转HTML的规则,保持上述规则的顺序(跳转规则在前,内部重写在后);
- 测试前可清空浏览器缓存,避免旧重定向规则的影响。
内容的提问来源于stack exchange,提问作者GingerMan
相关产品推荐
相关产品推荐

