Apache 为表单数据编写mod_重写
我试图用从表单获取数据来重写url。当提交仅包含英文字母的字符串时,此操作非常有效。但当我提交挪威字符(这是一个挪威页面)时,只显示未重写的url。我的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
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
标志保留在一旁