我有一个规则适用于一个“方向”,但不适用于另一个。
典型的传入网址/查询将是:(长网址)
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
脚本。
我在这里找到了一些接近的答案,但没有一个真正解释了我需要的东西。
有人可以帮忙吗?
答案 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]
希望有所帮助。