修改.htaccess后无法访问管理面板,求解决方案及指定页面去.php方法
问题解决:移除.php后缀后后台跳转失效+特定页面移除后缀配置
一、后台跳转失效的原因及修复
你的.htaccess第一条规则会把所有带.php的请求强制301重定向到不带后缀的URL,但登录表单是POST提交,301重定向会自动把POST请求转为GET,导致登录所需的username、password等POST参数丢失,最终登录失败、跳转异常。
修复方案:修改.htaccess,让POST请求不触发重定向规则,同时排除后台核心页面(比如index.php、membership_signup.php)的重定向:
RewriteEngine On RewriteBase / # 仅针对GET请求重定向.php后缀,同时排除后台页面 RewriteCond %{REQUEST_METHOD} GET RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] # 排除index.php和membership_signup.php RewriteCond %{REQUEST_URI} !^/(index|membership_signup)\.php$ [NC] RewriteRule ^ %1 [R=301,L] # 无后缀请求映射到.php文件,同样排除后台页面 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f # 排除index和membership_signup,保留它们的.php后缀访问 RewriteCond %{REQUEST_URI} !^/(index|membership_signup)$ [NC] RewriteRule ^(.*?)/?$ $1.php [NC,L]
另外,登录代码里的注册按钮链接href="membership_signup.php"无需修改,保持带后缀即可确保后台跳转正常。
二、仅在特定页面移除.php后缀
如果只想给部分页面(比如前端的about.php、contact.php)移除后缀,修改.htaccess规则,指定允许重写的页面列表:
RewriteEngine On RewriteBase / # 仅针对指定页面的GET请求重定向.php后缀 RewriteCond %{REQUEST_METHOD} GET RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/([a-z0-9-]+)\.php [NC] # 指定允许移除后缀的页面:about、contact、blog RewriteCond %1 ^(about|contact|blog)$ [NC] RewriteRule ^ %1 [R=301,L] # 仅映射指定的无后缀请求到.php文件 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f # 指定允许的页面列表 RewriteCond %{REQUEST_URI} ^/(about|contact|blog)$ [NC] RewriteRule ^(.*)/?$ $1.php [NC,L]
这样只有about、contact、blog这些页面可以不带后缀访问,其他页面(包括后台页面)必须保留.php后缀才能正常访问。
额外提示
- 测试前清空浏览器缓存,避免301重定向缓存导致旧规则依然生效。
- 如果后台还有其他页面,比如
dashboard.php,记得把它们添加到排除列表里,避免出现相同的跳转问题。
内容的提问来源于stack exchange,提问作者Saman Khadgi
相关产品推荐
相关产品推荐

