在.htaccess文件的正则表达式中包含URL编码的字符

时间:2018-06-26 10:42:58

标签: regex .htaccess urlencode url-encoding

我需要在.htaccess文件的正则表达式中包含URL编码的符号,以获取不同语言的特殊字符。

我有以下内容,其中包含空格字符%20

RewriteRule ^search/([0-9a-zA-Z\s-]+)/?$ search.php?search=$1 [L,NC,QSA]

但是我需要能够包含õ之类的字符,例如%C3%B5

基本上,我需要包含任何带有%字符的URL编码字符。

对此将提供任何帮助或协助。

2 个答案:

答案 0 :(得分:1)

您可以使用[^\/] negated character class

^search/([^\/]+)/?$

它匹配

  • ^-字符串的开头
  • search/-文字子字符串
  • ([^\/]+)-捕获组1(与之匹配的内容用$1引用):除/之外的任意1个以上的字符
  • /?-可选的/
  • $-字符串的结尾。

答案 1 :(得分:0)

您可以在网站根目录.htaccess中使用此代码:

Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^search/([^/]+)/?$ search.php?search=$1 [L,NC,QSA]
  • 您需要关闭 MultiViews选项,因为您的php文件名与起始URI组件相同。 MultiViews使用选项Apache's content negotiation module(请参阅http://httpd.apache.org/docs/2.4/content-negotiation.html)来运行{strong>之前 mod_rewrite,并使Apache服务器匹配文件扩展名的/search。因此,如果/search.php是URL,则Apache将提供RewriteCond
  • search/必须确保您与网站根目录中的目录IEnumerable<XDocument> WrapDocuments(MessageSettings messageSettings, IEnumerable<XDocument> documents); 不匹配。