2011-10-28 181 views
0

htaccess的啓用,我有規範化運行(不帶www到www。)我的.htaccess重定向失敗

我試圖使用htaccess的做到以下幾點

www.domain.com/page.php?i=Page1 
www.domain.com/page.php?i=Page2 

www.domain.com/Page1 
www.domain.com/Page2 

我嘗試使用此代碼段,與至今沒有運氣:

rewriterule ^([a-zA-Z0-9_-]+)/$ page.php?i=$1 

但是我想我會採用相反的方式。我找不到這樣的例子。 我有this但我不能讓它工作。

+0

只是一個快速提示;當你編寫一個正則表達式時,使用正則表達式測試工具通常是一個節省時間的工具,比如正則表達式或者正則表達式,所以你可以很快找到匹配,如果不匹配,爲什麼。 – FMaz008

回答

2

試試這個:

RewriteEngine On 
RewriteCond %{REQUEST_URI} ^/page\.php$ 
RewriteCond %{QUERY_STRING} ^i=([a-zA-Z0-9_-]+)$ 
RewriteRule ^(.*)$ http://www.domain.com/%1? [R=302,L] 

摘自:http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/

+0

沒有運氣,但它認爲這是一個正確的方向 –

+0

對不起,粘貼了錯誤的部分 - 如果你閱讀該鏈接上的內容,你應該得到它。更新了我的答案。 – swatkins

+0

此網頁有一個重定向循環 –

0

您希望www.domain.com/Page1在瀏覽器的地址欄中可見,但在內部該url實際上應該是/page.php?i=Page1。在這種情況下,問題是你的正則表達式後/

Rewriterule ^([a-zA-Z0-9_-]+)/$ page.php?i=$1 
          ^---here 

你所需/Page1網址有沒有尾隨斜線,但你重寫正則表達式需要一個,因此模式不匹配,也沒有發生重寫。嘗試取出/,看看有沒有什麼幫助任何:

Rewriterule ^([a-zA-Z0-9_-]+)$ page.php?i=$1 
          ^---no/
0

爲了解析出您需要訪問它的查詢字符串一個RewriteCond

# We need this line because /page.php?i=page.php will cause an infinite loop 
RewriteCond %{QUERY_STRING} !i=page.php 
# Now we parse out the value of i from the query string 
RewriteCond %{QUERY_STRING} i=([^&]+) 
RewriteRule ^page.php /%1 [L]