1

我正在尝试匹配.htaccess文件中的特殊字符,以便 id 值可以返回与正确 id 值匹配的页面。

在我的 MySQL 字段中,文本是:Thelma & Louise

在重写规则页面地址看起来像这样之前,所有属性数据都填充了页面www.site.com/movie.php?id=Thelma+%26+Louise

我的RewriteRule ^movie/([A-Za-z0-9_-\s]+)/?$ /movie.php?id=$1

网址是这样出来的,但是找不到页面错误

www.site.com/movie/Thelma+%26+Louise

如何正确匹配 ascii 字符以便显示页面。

谢谢你的帮助!

4

3 回答 3

1

URI 在通过任何重写规则之前都会被解码,因此您需要匹配空格和 & 符号&。您的模式([A-Za-z0-9_-\s]+)需要考虑这些符号:

RewriteRule ^movie/([A-Za-z0-9_&+-\s]+)/?$ /movie.php?id=$1 [L,B]

此外,您需要使用该B标志,以便分组匹配$1在查询字符串中得到正确编码。

于 2013-08-19T18:16:02.397 回答
0

首先,我不会在我的网址中使用任何 ascii 字符。也许试着修剪它们,这样你就有了 thelma-louise 或 thelma+louise。但那是我的个人经历。

其次,你用电影的名字重写你的 ID。你不能这样做:movie/([0-9a-zA-Z-]+)-([0-9]+) movie.php?id=$2 所以它看起来像movie/thelma-louise -101 很多电影都同名。现在您知道 IDS 至少是一个 INT。不要忘记检查 PHP 课程。

于 2013-08-19T18:16:00.390 回答
0

您的第二条规则可能不匹配。您可以尝试将所有可能的字符放入您的正则表达式中,但匹配所有字符可能更好,但您不想匹配的字符。在这种情况下,这可能是/字符:

RewriteRule ^movie/([^/]+)/?$ /movie.php?id=$1

请注意,您仍然必须确保您没有创建无限循环。

于 2013-08-19T18:16:24.930 回答