如何匹配.htaccess文件中的空格和ascii字符

时间:2013-08-19 18:09:14

标签: php .htaccess

我正在尝试匹配.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字符以便显示页面。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

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

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

此外,您需要使用B标记,以便在查询字符串中对分组匹配$1进行编码。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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