我正在尝试匹配.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字符以便显示页面。
感谢您的帮助!
答案 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
请注意,您仍然必须确保没有创建无限循环。