Rgd:htaccess无法完全停下来

时间:2015-08-31 18:57:55

标签: php regex apache .htaccess

如果我的网址是

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

网址返回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来处理此问题。

感谢

1 个答案:

答案 0 :(得分:1)

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

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

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

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

所以也许

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

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

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