mod_rewrite用于漂亮的网址和特殊字符

时间:2016-08-31 08:04:43

标签: apache .htaccess mod-rewrite urlencode

我正在使用以下代码使用GET vars重写uri请求到我的index.php文件

RewriteRule ^([^/]+)/$ index.php?parent=$1 [L]
RewriteRule ^([^/]+)/([^/]+)(/)?$ index.php?parent=$1&child=$2 [L]

所以网址

mysite.com/category/article  // resolves to 
$_GET['parent'] = category
$_GET['child'] = article 

我对导航的URL进行编码,以便

mysite.com/dates-&-events/ becomes mysite.com/dates-%26-events/

然而这会破坏mod_rewrite解析为

$_GET['parent'] = dates-  

过早地打破了弦乐。 如何更改正则表达式以在组中包含已编码的保留字符?

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找B flag

  

[B]标志指示RewriteRule在应用转换之前转义非字母数字字符。

     

mod_rewrite必须在映射URL之前对其进行unescape,因此反向引用将在应用它们时未转义。使用B标志,后向引用中的非字母数字字符将被转义。