Apache 为表单数据编写mod_重写

Apache 为表单数据编写mod_重写,apache,mod-rewrite,get,Apache,Mod Rewrite,Get,我试图用从表单获取数据来重写url。当提交仅包含英文字母的字符串时,此操作非常有效。但当我提交挪威字符(这是一个挪威页面)时,只显示未重写的url。我的mod_rewrite语句如下所示: RewriteCond %{REQUEST_URI} /resultpage.php$ RewriteCond %{QUERY_STRING} ^querystring=([a-zæøåäëöA-ZÆØÅÄËÖ0-9-\+]+)$ RewriteRule ^(.*)$ /sok/%1? [R=301,L] R

我试图用从表单获取数据来重写url。当提交仅包含英文字母的字符串时,此操作非常有效。但当我提交挪威字符(这是一个挪威页面)时,只显示未重写的url。我的
mod_rewrite
语句如下所示:

RewriteCond %{REQUEST_URI} /resultpage.php$
RewriteCond %{QUERY_STRING} ^querystring=([a-zæøåäëöA-ZÆØÅÄËÖ0-9-\+]+)$
RewriteRule ^(.*)$ /sok/%1? [R=301,L]
RewriteRule ^sok/(.*)$ /resultpage.php?querystring=$1&a=1 [L]
我在url中使用挪威字符,而不是从表单发布的,这非常有效


有什么建议吗?

挪威字符可能是URL编码的

我无法从文档中看出mod rewrite将如何处理这些问题

猜测

RewriteCond %{QUERY_STRING} ^querystring=([a-zA-Z0-9-+%]+)$

可以工作,因为它将拾取url编码的扩展字符,但它将允许任何字符,而不仅仅是您想要的字符集。您可以始终在应用程序层解决此问题。

我将使用
[^&]
代替:

RewriteCond %{REQUEST_URI} ^/resultpage\.php$
RewriteCond %{QUERY_STRING} ^querystring=([^&]+)$
RewriteRule ^resultpage\.php$ /sok/%1? [R=301,L]
您仍然可以简化它:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /resultpage\.php\?querystring=([^&\s]+)\s
RewriteRule ^resultpage\.php$ /sok/%1? [R=301,L]
使用此解决方案,您甚至可以将第二个
重写规则的
a=1
标志保留在一旁