【问题标题】:Rgd: htaccess unable take in full stopRgd:htaccess 无法完全停止
【发布时间】:2015-08-31 18:57:55
【问题描述】:

如果我的网址是

http://www.example.com/book/book1/35.1/1

url 返回 404 未找到

如果我的网址是

http://www.example.com/book/book1/34/1

网址没问题

下面是我的 .htaccess 文件

Options +Indexes
RewriteEngine on
RewriteBase /book

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/(\d+)/([^/]+)$ index.php?id=$1&num=$2&page=$3 [L,QSA]
RewriteRule ^([^/]+)/(\d+)/?$ index.php?id=$1&num=$2 [L,QSA]
RewriteRule ^([^/]+)/?$ index.php?id=$1 [L,QSA]

我不确定为什么句号似乎不起作用,我该如何更改 htaccess 来处理这个问题。

谢谢

【问题讨论】:

  • 或者只是([\d.]+) 而不是(\d+)
  • [\d.]+) 将允许多个句点,或者只允许一个句点并且没有数字。
  • 好吧,检查一般格式可能就足够了。目标脚本仍然需要验证实际值,同样9999999 也可能无效。

标签: php regex apache .htaccess


【解决方案1】:

问题是您的正则表达式只在斜线之间寻找数字。您可以将其更改为

^([^\/]+)\/(\d+(?:\.\d+)?)\/([^\/]+)$

演示:https://regex101.com/r/oF7aZ1/2

这将找到任何连续数字或小数然后数字 ((?:\.\d+))。我不确定 htaccess 是否支持非捕获组(更新:通读它似乎 Apache 2 确实支持非捕获组)。

也许

^([^\/]+)\/(\d+\.?\d*)\/([^\/]+)$

会更好。这种方法的缺陷是. 之后的数字是可选的。所以例如3. 是有效的,这不是一个真正的数字。

演示:https://regex101.com/r/oF7aZ1/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2015-02-24
    • 2015-09-22
    • 2019-01-03
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多