2011-06-15 321 views
1

我在我的菜單系統中使用php開關[_get]創建url.com/?p=page,我希望將其更改爲url.com/page.html。但我無法讓它工作,也許你們中的一些人知道正確的設置。.htaccess重寫規則不起作用!

我目前使用這個作爲的.htaccess:

RewriteEngine On 
RewriteBase/
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
RewriteRule ^start(.*)\.html$ ?p=start$ 

謝謝!

更新:

我試圖與$1但仍網址是:?p=start時,我想這是/start.html

+1

請在您的瀏覽器*中將URL添加到問題中。 – hakre 2011-06-15 18:41:07

+0

以及我只是輸入url.com,但由於菜單隻包含7個鏈接,我希望每個鏈接都是url.com/page而不是page.com/?p=page – MstrQKN 2011-06-15 18:50:32

+0

這與.htaccess文件無關。您需要更改菜單代碼的輸出。 – hakre 2011-06-15 19:05:59

回答

2

看起來像你缺少你的最後一條規則的$1

RewriteRule ^start(.*)\.html$ ?p=start$1 
            ^^^^ 

編輯新信息後,請嘗試:

RewriteCond %{QUERY_STRING} p=([a-z0-9]+) [NC] 
RewriteRule . /%1.html [L] 

此捕獲來自查詢字符串的p=參數,並使用它來重寫page.html

+0

嗯我試過$ 1,但仍然是這樣的網址:?p =開始時,我想它是/start.html – MstrQKN 2011-06-15 18:35:55

+1

@Jaoza媒體所以你想讓你的用戶輸入'/ start.html'並將內部重定向到'? p = start'?請給出一個例子,說明用戶輸入的內容與內部重定向的內容。 – 2011-06-15 18:43:24

+0

@Michael對不起,我的壞描述:) 基本上我想要htaccess重定向所有的URL從?p = page到page.html,但因爲我已經有了靜態id的,例如start/about/services/contact我想要ie ?p =服務爲services.html。 – MstrQKN 2011-06-15 18:46:13

1

嘗試

RewriteRule ^start(.*)\.html$ ?p=start$1 [L] 

見(1)在最後的一個。

+0

不幸的是,它不起作用。[L]做什麼? – MstrQKN 2011-06-15 18:36:36

+0

L = Last - Last Rule。 [請參閱文檔](http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule),此規則後不會執行其他規則。 – hakre 2011-06-15 18:44:35

1

htaccess以相反的方式工作。

它使得像/start.html代理?p=start然而,你仍然使鏈接本身目標/start.html

因此,將所有<a href="?p=start">更改爲<a href="/start.html">

+0

現在他們被稱爲start.php等,但由於搜索引擎優化,我希望URL在HTML中。 – MstrQKN 2011-06-15 18:49:05

1

你需要

RewriteCond %{QUERY_STRING} ^p=(.+)$ [NC] 
RewriteRule ^$ /%1.html? [R=301,L] 

R = 301是改變瀏覽器的URL,但 你仍然需要更新網站上的所有鏈接:

<a href="?p=start"><a href="/start.html">

編輯:嘗試更新後的版本(在html之後有一個?)

+0

改變它們到什麼?感謝您的幫助 – MstrQKN 2011-06-15 19:29:40

+0

我試過你的解決方案,但它給了我start.html?p = start而不是start.html – MstrQKN 2011-06-15 19:30:37

+0

@Jaoza Media檢查更新後的 – venimus 2011-06-16 08:37:19