2011-09-12 156 views
1

我第一次潛入htaccess/mod重寫的用途,並且我對重定向/掩碼有一點點麻煩。mod_rewrite /重定向?在查詢字符串

我有一個測試目錄我叫modrw根文件夾,該文件夾中是一個index.php文件有一個很好的和簡單的:

<?php echo $_GET['name']; ?> 

在瀏覽器中,如果然後我型www.domain.com/modrw/{word}/這個詞是在呼應頁面,這是我想要的。

如果我輸入www.domain.com/modrw/name={word},那麼我會被重定向到www.domain.com/modrw/{word}/,這個詞也會按照我的意圖迴應。

但是,如果我指示瀏覽器的網址爲www.domain.com/modrw/?name={word}/這個詞被回顯,但我沒有像我希望的那樣被重定向到www.domain.com/modrw/{word}/

?如何造成麻煩?在下面的RewriteRule代碼中包含?,我嘗試了幾種不同的方法,但無法使其工作。

這裏是我的htaccess文件:

RewriteEngine on 

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L] 

RewriteRule ^modrw/?name=([^/\.]+)/?$ http://www.domain.com/modrw/$1 [R] 
RewriteRule ^modrw/([^/\.]+)/?$ modrw/?name=$1 

什麼原因造成的問題,有沒有包括?一種特定的方式,它不挑這件事呢?我完全採取錯誤的做法嗎?

我也使用Options +FollowSymlinks試過,但我不完全知道這是什麼也不做,如果它需要在所有...

回答

3

記住RewriteRuleonly匹配REQUEST_URI。要匹配查詢字符串,您必須將變量%{QUERY_STRING}用於RewriteCond。例如。在你的情況下:

RewriteCond %{QUERY_STRING} ^name=(.*)(&|$) [NC] 
RewriteRule ^modrw /modrw/%1? [L,R,NC] 
+0

啊,好的,謝謝!然而,我是否需要替換當前的RerwiteRule或者添加這個,我嘗試添加這個,但是通過使用兩個我得到一個重定向循環,並且如果我用我的代碼替換你的代碼,重定向對於它同時使用'?'沒有,但我得到404'd – Joe

+0

你需要支持這兩個URI:1)'www.domain.com/modrw/name= {word}'和2)'www.domain.com/modrw?name = {字}'?如果是,那麼請在這裏發佈你的access.log和error.log相關輸出。 – anubhava

+0

經過一番思考,我已經決定了我的工作方式實際上足夠好,被屏蔽/重定向的鏈接都是從我的網站生成的所有鏈接,因此除非有人手動輸入查詢到瀏覽器中不會有任何問題。因爲如果查詢不匹配,他們只會得到404'd。 'modrw/name = {word}'可以很好地重定向到'modrw/{word} /',如果{word}沒有使用mysql查詢獲取結果,反正會顯示錯誤消息。我不知道爲什麼我以前沒有考慮過它!但是,謝謝你的片段,它一定會很快派上用場,我敢肯定! :) – Joe