使用.htaccess的RewriteRule实现URL重写遇问题求助
排查并修复你的URL重写配置问题
让我来帮你梳理下当前配置里的问题,以及如何修正:
原配置的核心问题
- 正则表达式未捕获目标参数:你最后的
RewriteRule .$ https://www.example.com/post.php?idpost=$1 [L]里,正则.$没有用括号分组捕获任何内容,导致$1是空值,自然无法传递正确的idpost参数。 - 规则未匹配
/article/前缀的路径:原规则会把所有非文件/非目录的请求都重写到post.php,这不符合你只针对/article/xxx路径的需求。 - 第一条规则意义不大:
RewriteRule ^article/$ - [L]仅匹配/article/这个精确路径,对你要实现的/article/how-to-visit-italy-in-winter没有作用,反而可能在某些场景下干扰规则执行。
修正后的.htaccess配置
RewriteEngine On # 排除真实存在的文件和目录(避免重写静态资源) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 匹配/article/xxx格式的URL,捕获xxx作为idpost参数 RewriteRule ^article/([^/]+)$ post.php?idpost=$1 [L]
配置说明
^article/([^/]+)$:这个正则会匹配以/article/开头,后面跟着任意不含斜杠的字符(也就是你的文章标识)的路径,括号里的[^/]+会把文章标识捕获为$1。post.php?idpost=$1:直接使用相对路径即可(如果你的.htaccess在网站根目录),把捕获到的$1作为idpost参数传递给原始脚本。[L]标记表示这是最后一条规则,匹配后不再执行后续规则。
额外注意事项
- 确保你的服务器已经启用了
mod_rewrite模块(Apache默认通常是启用的,但如果没生效可以检查服务器配置)。 .htaccess文件要放在网站的根目录下,和post.php同一层级。
内容的提问来源于stack exchange,提问作者Pier
相关产品推荐
相关产品推荐

