1

尽管网络上有很多关于它的文章,我都无法理解重写 URL 背后的概念。

假设我要查看的网页的绝对路径是www.abc.com/games.php?game=1. 我希望链接www.abc.com/games/game/1重定向到上面的页面。

这条规则对它不起作用吗?

RewriteRule games/game/([^/\.]+)/?$ games.php?game=$1 [L]

我的.htaccess file

RewriteEngine On
RewriteBase /
RewriteRule games/game/(\d+)/?$ games.php?game=$1 [L, QSA]
4

2 回答 2

2

“这条规则行不通吗?”

RewriteRule games/game/([^/\.]+)/?$ games.php?game=$1 [L]

是的,它会工作。但是您的正则表达式可以简化和改进:

  1. (...)- 括号中的字符将被捕获 - 正确,这就是我们需要的。

  2. [^/\.]- 将匹配任何不在字符类中的字符;即任何符号,不是斜线/也不是点。- 这并不完全正确。我们需要匹配任意数量的数字:\d+。但是您的正则表达式也将匹配非数字符号。

  3. /?$- 字符串末尾可能有斜线

所以,我们可以像这样重写你的正则表达式:

^games/game/(\d+)/?$

我在开头添加了一个大写符号,因此我们可以确定 URL 以“游戏”开头。

这个网站可能会有所帮助:

http://www.regular-expressions.info/

于 2013-07-09T07:35:27.200 回答
0

当您处理查询字符串和重写规则时,您需要“QueryString Append”选项。

qsappend|QSA'(查询字符串追加) 此标志强制重写引擎将替换字符串的查询字符串部分追加到现有字符串,而不是替换它。当您想通过重写规则向查询字符串添加更多数据时,请使用此选项。

所以,你应该使用这个:

RewriteRule games/game/(\d+)/?$ games.php?game=$1 [L, QSA]

现在您可以$_GET['game']从您的处理页面访问。

于 2013-07-09T07:44:24.820 回答