1

我正在寻找一种在用户搜索我的网站时提供友好 URL 的方法。我目前有一个半功能选项,但它只适用于一个搜索词。我希望能够添加尽可能多的搜索词。

我的 URL 设置如下:

http://www.mydomain.com/tutorial/usersearch=word/sort=1

在 .htaccess 中使用以下正则表达式:

# Rewrite rule for the tutorial 'page selection' links
RewriteRule ^tutorial/page([0-9]+)$ tutorial.php?page=$1
RewriteRule ^tutorial/page([0-9]+)/usersearch=([A-Za-z_%20+-]+)$ tutorial.php?page=$1&usersearch=$2
RewriteRule ^tutorial/page([0-9]+)/usersearch=([A-Za-z_%20+-]+)/sort=([0-9]+)$ tutorial.php?page=$1&usersearch=$2&sort=$3
RewriteRule ^tutorial/usersearch=([A-Za-z_-]+)(/sort=([0-9]+))?$ tutorial.php?usersearch=$1&$2

上述代码的最后一行是指我正在尝试创建的友好搜索 URL。/sort=integer 部分也是可选的。输入搜索词并点击提交按钮后,以下内容被添加到不友好的 URL '&submit=Search' 中,所以我不知道是否也应将其作为一个选项考虑在内?

上面的 .htaccess 正则表达式有效,但只有一个搜索词。

' http://www.mydomain.com/tutorial/usersearch=word/sort=3 ' - 这行得通,但是只要在 'word' 之后添加一个空格,URL 就会失败,并且会出现 404 错误。我试过添加 ( )?, (%20)? 对于可选空间,但它甚至在那里失败。我尝试在第一个字符类中添加一个空格,但这完全失败了。

我确信有一种方法可以将上面的所有这些重写分组,但我失败了。知道如何修改我的正则表达式,以便匹配多个搜索词吗?

谢谢你的帮助。

4

1 回答 1

1

您的正则表达式不匹配空格:

[A-Za-z_-]

仅匹配大写/小写 ascii 字母下划线和连字符。

更改您的规则,例如抢空间:

RewriteRule ^tutorial/usersearch=([^/]+)(?:/(sort=[0-9]+))?$ index.php?usersearch=$1&$2 [L,QSA,NC]
于 2013-09-11T10:51:28.343 回答