求助:配置.htaccess实现带log参数的URL伪静态重写
问题分析与解决方案
你的Rewrite规则存在语法和逻辑错误,导致无法生效:
- 若
.htaccess放在/paste/目录下,规则匹配时不需要包含/paste/前缀(.htaccess作用范围是当前目录及子目录,匹配的是相对路径) - 正则表达式语法错误:
^应在匹配模式最开头,原规则/paste/^的写法完全错误;同时括号内表达式的*$顺序颠倒,斜杠位置也不对
正确规则(分两种场景)
场景1:.htaccess放在/paste/目录下(推荐)
直接匹配当前目录下的请求路径,规则如下:
RewriteEngine On # 排除真实存在的文件和目录,避免影响index.php等文件 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 匹配字母数字组成的路径,映射为log参数 RewriteRule ^([a-zA-Z0-9]+)/?$ log.php?log=$1 [QSA,L]
场景2:.htaccess放在网站根目录下
需要指定/paste/前缀,规则如下:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^paste/([a-zA-Z0-9]+)/?$ paste/log.php?log=$1 [QSA,L]
规则说明
RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d:仅对不存在的文件/目录重写,避免覆盖真实文件^([a-zA-Z0-9]+)/?$:匹配字母数字组成的路径,末尾/?允许路径带或不带斜杠(两种形式都能生效)[QSA]:保留原请求中的其他查询参数(如果有)[L]:匹配后不再执行后续规则
内容的提问来源于stack exchange,提问作者Bence
相关产品推荐
相关产品推荐

