2013-01-16 48 views
0

使用Apachehtaccess文件,我想rewrite的URL http://example.com/page.php?v1=abc&v2=defhttp://example.com/abc/defmod_rewrite的重寫example.com/page.php?v1=abc&v2=def到example.com/abc/def

到目前爲止,我有:

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule case-study/(.*)/(.*)/(.*)/(.*)/$ /case-study.php?$1=$2&$3=$4 

但這似乎只是服務於實際文件page.php與URL不變。

有沒有人知道什麼是正確的方法來做到這一點或上述可能是錯誤的?

回答

3

你有它向後。你首先要改寫什麼,然後改變它到底是什麼。以下可能不準確,但應接近你所需要的:

​​

RewriteCond {%QUERY_STRING} v2=(.*)$

RewriteRule case-study.php /case-study/%1/%2/

這裏的更多詳細信息,重寫規則的文檔:mod_rewrite

注意在規則和替換上使用前導斜線將取決於您使用的上下文(請參閱鏈接的文檔)。在上面的例子中,%1和%2指向第一個和第二個RewriteCond中的捕獲組。以下是描述該方法的頁面:mod_rewrite based on query string parameters

+0

感謝您不知道這一點。但是URL仍然沒有改變。 htaccess肯定會被閱讀,因爲我可以用隨機文本將它帶到500錯誤。有什麼你可以建議,爲什麼它不重寫? –

+1

現在我想到了,我不相信在RewriteRule中使用查詢字符串,我認爲它必須在它之前進入RewriteCond中......我正在更新答案 - 它可能不完全正確(有一段時間沒有做過這種規則),但應該朝着正確的方向前進。 –

+1

更新...如果這不起作用,那麼您可能想要更簡單地開始 - 例如,僅匹配base case-study.php並將其重寫爲/案例研究。一旦該重寫按預期工作,那麼一次一個地添加查詢參數。當然,請記住在測試之間重新啓動Web服務器,以免在更新文件(從經驗中說出)後讓自己陷入錯誤結論。 –