htaccess实现详情页URL末尾带/或字符时跳转404.php的方法
解决方案
直接将你的.htaccess配置替换为以下内容,即可实现详情页URL末尾带斜杠或额外字符时跳转404.php的需求:
RewriteEngine on # 修正主机名重定向规则(原规则HTTP_HOST写法错误,HTTP_HOST仅包含主机名不含路径) RewriteCond %{HTTP_HOST} ^localhost$ [NC] RewriteRule ^(.*)$ http://localhost/$1 [L,R=301,NC] # 拦截详情页末尾带斜杠的请求,直接返回404 RewriteRule ^([^/_.]+)/$ - [R=404,L] # 拦截详情页后带额外路径的请求,直接返回404 RewriteRule ^([^/_.]+)/.+$ - [R=404,L] # 自动添加.php后缀(仅当对应文件存在时) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [L] # 详情页URL重写规则 RewriteRule ^([^/_.]+)$ detay.php?url=$1 [L,QSA] # 页面URL重写规则 RewriteRule ^sayfa/([^/_.]+)$ index.php?page=$1 [L,QSA] # 指定404错误跳转页面 ErrorDocument 404 /404.php <IfModule mod_security.c> SecFilterEngine Off SecFilterScanPOST On </IfModule>
关键修改说明:
- 修正主机名规则:原规则中
%{HTTP_HOST} ^localhost/写法错误,HTTP_HOST仅存储主机名(如localhost),不包含路径,调整后避免无效匹配。 - 新增拦截规则:
RewriteRule ^([^/_.]+)/$ - [R=404,L]:匹配末尾带斜杠的详情页URL(如/test/),直接返回404状态码并跳转至404.php。RewriteRule ^([^/_.]+)/.+$ - [R=404,L]:匹配详情页后附带额外路径/字符的URL(如/test/abc),直接返回404。
- 调整404跳转目标:将原指向根目录的配置改为指向
/404.php,确保错误请求正确跳转至指定页面。 - 规则顺序优化:拦截规则必须放在详情页重写规则之前,确保不符合要求的请求先被拦截,不会进入正常详情页逻辑。
若你的404.php不在网站根目录,需调整ErrorDocument后的路径为实际相对路径。
内容的提问来源于stack exchange,提问作者ilkertncr
相关产品推荐
相关产品推荐

