为表单数据编写mod_rewrite

时间:2009-04-14 11:34:14

标签: apache mod-rewrite get

我正在尝试使用表单中的GET数据重写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]

我在网址中使用的挪威字符未从表单中发布,这很有用。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

挪威字符很可能是URL编码的。

我无法从文档中看到mod重写将如何处理这些。

猜测

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

可以工作,因为它将获取url编码的扩展字符,但它将允许任何字符,而不仅仅是你想要的字符集。您可以随时在应用程序层修复此问题。

答案 1 :(得分:1)

我会改用[^&]

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的{​​{1}}标记。