Apache / Linux - .htaccess如何从查询/ url获取特定变量并应用于重写

时间:2011-04-21 21:00:37

标签: .htaccess mod-rewrite

我有一个规则适用于一个“方向”,但不适用于另一个。

典型的传入网址/查询将是:(长网址)

http://somedomain.com/getme.pl?dothis=display&partnum=1234567(可能最多9位数)

我的htaccess文件中有这个规则:

RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1 [L]

这样可以轻松获得一个独特的部件号:

http://somedomain.com/1234567.

但是,我想把长网址设为“漂亮”,所以我认为我可以反转(ish)它。

因此,当点击网站上的链接(长网址)时,htaccess文件会将长网址处理为美化版本。

我尝试了很多尝试。 这是我最近的失败。

RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1 [L] #(works)
RewriteCond %{QUERY_STRING} ^partnum=([0-9]*) #(tried to get partnum)
RewriteRule ^.* http://%{HTTP_HOST}/%1 [R] #(make the short url)
RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1 [L] #(the known working rule)

我尝试了大量规则并访问了许多网站以获取建议。 我只使用规则,只是条件和query_string的变体。

所以,我相信我必须从查询中获取“partnum”并重写为/ 1234567或http_host / 1234567

然后,允许其他规则(工作)处理。

所以两个人:

http://somedomain.com/getme.pl?dothis=display&partnum=1234567

http://somedomain.com/1234567

在浏览器中显示为:http://somedomain.com/1234567

并且都将整个查询正确传递给getme.pl脚本。

我在这里找到了一些接近的答案,但没有一个真正解释了我需要的东西。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

从它的声音中,这应该让你沿着正确的道路前进:

# Your working rewrite, with extra param on the rewrite
RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1&rewrite [L]

# Redirect for long urls, to pretty url
# -The appended '&rewrite' on the first rule will force this not to match
# -The trailing '?' on the rewrite will strip the query string
RewriteCond %{QUERY_STRING} partnum=([0-9]*)$
RewriteRule (.*) /%1? [L,R=301]

希望有所帮助。