2015-05-21 108 views
0

我想改變我的網址,從這個例子:的.htaccess重寫URL與參數

www.website.com/?page=about 
www.website.com/?page=info 
www.website.com/?page=contact 

這樣:

www.website.com/about 
www.website.com/info 
www.website.com/contact 

這應該是可行的一個規則,我希望。我一直在環顧四周,但我看到人們分別做每一件事情。 所以唯一的URL參數是「頁面」,網站只有一個深度。應該很容易吧? :)

回答

2

這是一個非常基本的常見問題。這在你的根目錄下的.htaccess中。

RewriteEngine On 
RewriteBase/

#prevent anyone from using the old urls 
RewriteCond %{THE_REQUEST} [A-Z]{3,}\ /+\?page=([^&\ ]+) [NC] 
RewriteRule^/%1? [R=301,L] 

#provide pretty URL's 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/?$ /?page=$1 [L] 
2

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代碼:

RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} \s/+\?page=([^\s&]+) [NC] 
RewriteRule^%1? [R=302,L,NE] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/.]+)/?$ ?page=$1 [L,QSA] 
+0

我很好奇:有沒有你傾向於使用'THE_REQUEST'而不是'QUERY_STRING'什麼特別的原因?畢竟,查詢字符串是所有需要在這裏測試的......我只是認爲,對於那些剛接觸mod_rewrite的人來說,這可能看起來有點混亂,尤其是因爲沒有多少人知道'THE_REQUEST'通常包含什麼。 –

+0

使用'QUERY_STRING'會導致重定向循環,因爲'QUERY_STRING'在第二條規則中被重寫爲'?page = ...'。 'THE_REQUEST'在執行其他規則後不會更改其值。 – anubhava

+1

當然 - 在那裏我一直使用虛擬'&r's來防止循環。這更有意義 - 謝謝澄清。 –