Htaccess 正则表达式工作异常

Htaccess 正则表达式工作异常

我正在尝试编写 .htacess 文件来捕获如下 URL:

http://www.site.com/pageone.html

http://www.site.com/pagetwo.html

并将它们重定向到 index.php,以便它会收到'第一页' 和 '第二页' 作为 GET 参数。

以下是我的 htacess:

选项 +关注符号链接

验证用户文件 /dev/null

AuthGroup文件 /dev/null

重写引擎开启

RewriteOptions 继承

重写规则 ^((?:.[^/])+).html$ index.php?page=$1 [L]

添加处理程序 php5 脚本 .php

这个正则表达式的问题在于它捕获了一些页面,而其他页面则显示 404 错误。我不明白这种行为。

例如

http://www.site.com/draw.html

运行正常。我在脚本中将“draw”作为 GET 参数。

http://www.site.com/draws.html

重定向至 404 页面

有人能解释一下我的 htacess 出了什么问题吗?

ps - 我在典型的 MAMP 配置下的本地 Apache 服务器上看到了这一点。

答案1

RewriteRule ^((?:.[^/])+).html$ index.php?page=$1 [L]
  • ^= URI 开头的锚点
  • (?:= 将表达式扩展为组而不创建反向引用;不确定这里的目的是什么。
  • .= 匹配单个字符。
  • [^/]= 匹配任何非斜线的内容
  • += 以上所有内容,重复一次或多次
  • .html= 必须以 .html 结尾
  • $= 锚定 URI 的末尾。

此代码将匹配 /ab/cd/ef/foo.html 等内容,而这永远不会出现在每个目录上下文中。
它将不是匹配奇数长度的资源或目录,因为您明确忽略了那些带有 的资源或目录(.[^/])

由于您没有指定是否应处理多个子目录,因此只需匹配您描述的内容就可以更轻松地完成:

RewriteRule ^([^/]+).html$ index.php?page=$1 [L]

如需进一步帮助解决问题,请参阅RewriteLog 文档

相关内容