在已有友好URL规则的.htaccess中移除.php后缀失败求助
解决方案:移除PHP扩展名并保留Slug路由规则
问题出在规则的执行顺序上——你的Slug路由规则优先级太高,会先捕获所有非真实文件/目录的请求,包括/contact这类对应真实PHP文件的路径,导致移除扩展名的规则根本没机会触发。
调整规则顺序并优化配置即可解决,完整的.htaccess代码如下:
RewriteEngine On # 移除PHP扩展名:先检查请求路径对应的.php文件是否存在,存在则内部跳转 RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L] # Slug路由规则:仅当请求不是真实文件/目录时,才转发到en.php处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([-/.a-zA-Z0-9]+)$ en.php?slug=$1 [QSA,L]
关键说明
- 规则顺序:先处理静态PHP文件的扩展名隐藏,再处理动态Slug路由。这样
/contact会先匹配到存在的contact.php,内部跳转加载该文件;而像/about-us这类无对应PHP文件的路径,才会进入Slug路由规则。 - 测试验证:
- 保存配置后,直接访问
example.com/contact,应该能正常加载contact.php内容 - 验证动态路由(如
example.com/your-slug)是否仍正常指向en.php?slug=your-slug
- 保存配置后,直接访问
- 额外检查:
- 确认服务器已启用
mod_rewrite模块 - 确保
.htaccess文件权限设置正确(通常为644),服务器能读取该文件
- 确认服务器已启用
内容的提问来源于stack exchange,提问作者Kamikaza
相关产品推荐
相关产品推荐

