请求解决.htaccess规则问题:访问staff路径跳转PHP文件失败
解决.htaccess中staff目录下无后缀URL跳转至对应PHP文件的问题
你的规则失效主要是因为缺少对目标PHP文件存在性的检查,以及没有排除已存在的文件/目录干扰,以下是修正后的方案:
方案1:内部重写(地址栏保持无后缀)
用户访问example.com/staff/my_boss时,服务器内部处理为my_boss.php,地址栏不会变化:
RewriteEngine On RewriteBase / # 排除已存在的文件和目录,避免无效重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 仅当对应的PHP文件存在时执行重写 RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^staff/([^/]+)$ /staff/$1.php [L]
方案2:外部跳转(地址栏显示.php后缀)
如果需要让用户地址栏明确显示.php后缀,可添加R=301实现永久跳转:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^staff/([^/]+)$ /staff/$1.php [L,R=301]
关键说明
- 文件存在性检查:
RewriteCond %{REQUEST_FILENAME}.php -f确保只有当my_boss.php这类文件真实存在时,才执行重写操作,避免因访问不存在的路径导致404。 - 排除已存在资源:
RewriteCond %{REQUEST_FILENAME} !-f和!-d是为了防止规则对已存在的静态文件(如图片、CSS)或目录生效,避免不必要的重写冲突。 - 关闭MultiViews:如果你的服务器开启了
mod_negotiation模块的MultiViews功能,可能会干扰重写规则。可以在.htaccess开头添加Options -MultiViews来禁用该功能,确保规则优先生效。
内容的提问来源于stack exchange,提问作者user2251695
相关产品推荐
相关产品推荐

