2010-08-21 68 views
0

所以我有一个网页,根据这个参数search.php?state=AL查询一些数据。使用mod_rewrite重定向?

我想要做的就是在我的.htaccess文件编写规则即会:

  1. 转化为website.com/state/ALsearch.php?state=AL
  2. 如果用户明确要求search.php?state=AL然后翻译成/state/AL

我用这个完成了第一步:

RewriteRule ^state/([A-Za-z][A-Za-z]) /search.php?state=$1 [NC]

我该如何完成第2步?我知道我将不得不使用[R, NC]来重写URL,但那是我卡住的地方。

编辑:不知道这事,但我的主机服务商的力量我形成了一些理由来添加RewriteBase /.htaccess文件的顶部。

回答

2

你想只在原来的请​​求被指向/search.php?state= URL,像这样的情况下执行重定向:

RewriteEngine On 

# Externally redirect /search.php?state=XX --> /state/XX 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/search\.php\?state=([A-Z]{2}) [NC] 
RewriteRule^http://%{HTTP_HOST}/state/%1? [R=301,L] 

# Internally redirect /state/XX --> /search.php?state=XX 
RewriteRule ^state/([A-Z]{2}) /search.php?state=$1 [NC] 
+0

这正是我想要的,但由于某种原因,它不工作。它仍然在地址栏中显示“search.php?state = AL”。 – 2010-08-21 21:25:28

+0

@鲍勃迪伦 - 是的,那是因为我愚蠢地忘记逃避问号。我会编辑答案。 (我忘了杀死重定向的查询字符串,我也加入了) – 2010-08-21 21:32:43

+0

谢谢修复! – 2010-08-21 21:35:24

0

像这样的事情会做的伎俩:

RewriteRule ^state/([A-Za-z][A-Za-z]) /search.php?state=$1 [NC, L] 
RewriteCond %{QUERY_STRING} state=([A-Za-z][A-Za-z]) 
RewriteRule ^search\.php$ /state/%1 [R=303, NC] 
+0

当我试过这一个,它给了我一个内部服务器错误:'500' – 2010-08-21 21:21:14