2010-08-21 70 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