Mod Rewrite规则失效求助:schemdetail重写规则无法正常生效
解决Mod Rewrite规则不生效的问题
问题分析
你的规则顺序和目标路径处理存在冲突,导致预期的重写没有正确执行:
- 规则顺序错误:HTTPS强制跳转规则放在了内部重写规则之后,可能导致HTTP请求下内部重写先执行,后续跳转被
[L]标记阻断;同时自动添加.php的规则会修改第一条重写的目标路径。 - 目标路径可能缺失后缀:如果实际处理文件是
schematicdetails.php,原规则的目标schematicdetails会被后续规则自动加上.php,但规则顺序不对会导致匹配逻辑混乱。
修改后的.htaccess配置
RewriteEngine On # 优先强制HTTPS跳转,确保所有请求先转至HTTPS RewriteCond %{SERVER_PORT} !=443 RewriteRule ^(.*)$ https://abfielder.com/$1 [R=301,L] DirectoryIndex index.php # 处理schemdetail路径重写,直接指向目标PHP文件(根据实际文件调整) RewriteRule ^schemdetail/id/(.*)$ schematicdetails.php?id=$1 [L,NC] # 自动为不存在的文件/目录添加.php后缀 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule (.*) $1.php [L]
关键调整说明
- 将HTTPS跳转放在最顶部:外部重定向(如HTTPS跳转)需要优先于内部重写,避免规则执行顺序导致的逻辑错误。
- 第一条重写规则直接指定
.php后缀:利用[L]标记停止后续规则处理,确保目标路径不会被自动加.php的规则修改。如果你的schematicdetails是无后缀的路由入口(比如框架控制器),可以保留原目标schematicdetails?id=$1,但必须确保这条规则在自动加.php规则之前。 - 验证文件存在性:确认网站根目录下存在
schematicdetails.php(或对应的无后缀文件),权限设置正确可被服务器读取。
内容的提问来源于stack exchange,提问作者Ali Beasley
相关产品推荐
相关产品推荐

