2014-10-01 48 views
0

我剛開始學習PHP和.htaccess的第一步,我的大部分新網站都是關於主類別和少量子類別的。 這裏有鏈接的例子制定的.htaccess RewriteEngine敘述之前,我有:.htaccess RewriteEngine轉換鏈接無需更改鏈接

  • example.com/index.php?cat=email
  • example.com/index.php?cat=about &秀=一些

用的.htaccess RewriteEngine敘述我已經他們convered到的幫助:

  • example.com/email/
  • example.com/about/some/

這裏的.htaccess的一部分:

RewriteRule ^([A-Za-z0-9-]+)/$ index.php?cat=$1 [L] 
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ index.php?cat=$1&show=$2 [L] 
RewriteRule ^([A-Za-z0-9-]+)$ index.php?cat=$1 [L] 
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ index.php?cat=$1&show=$2 [L] 

現在的問題是,大部分的內容都內的鏈接,如:「example.com/index.php?貓=約&表演=一些「改變他們都是選擇,但無論如何...還有什麼可以做?我聽說過一些.htaccess選項可以自動轉換鏈接來格式化你需要的格式,而不需要手動修改它們,所以PHP頁面中的所有鏈接都是相同的,但是一旦用戶加載頁面,鏈接就會像(example.com/about/some/) )有沒有這樣的事情,還是有沒有其他的選擇離開原來的鏈接而不改變它們?

乾杯!

+0

這對您的服務器而言是一種重載,並且是一種不好的做法。你應該始終讓它思考友好,這樣你只需要一次規則就可以達到這個目的,而不必爲了獲得正確的結果而進行雙重重定向。你也可以將你當前的規則恢復成2條規則。例如:'RewriteRule ^([A-Za-z0-9 - ] +)/?$ index.php?cat = $ 1 [L]'你可以有2條規則去做你所有的事情需要而不是4,也可以恢復成一個單一的規則,但爲了清晰起見,它更好地與2. – Prix 2014-10-01 12:44:44

+0

乾杯! ([A-Za-z0-9-] +)/?$ index.php?cat = $ 1 [L] RewriteRule ^([A-Za-z0-9-] +) ] +)/([A-Za-z0-9 - ] +)/?$ index.php?cat = $ 1&show = $ 2 [L] – JU1CY 2014-10-01 12:49:46

回答

0

您的網站上的鏈接是用您的PHP腳本創建的,Apache與htaccess不能奇蹟般地更改原始鏈接中的所有鏈接。

現在你可以做什麼,使用htaccess重定向舊的URL到新的,使用301重定向。

例如,如果有人點擊example.com/index.php?cat=email,Apache將重定向(= URL將被更改並且會有另一個HTTP請求)至example.com/email/,並且然後重寫這個到index.php貓=電子郵件

添加到您的htaccess:

RewriteCond %{REQUEST_FILENAME} index.php$ 
RewriteCond %{QUERY_STRING} cat=([a-zA-Z0-9-]+) 
RewriteRule^http://example.com/%1/? [L,R=301] 

無論如何,我強烈建議你直接更改鏈接在你的代碼,因爲即使解決方案我已經只是解釋應該工作(未測試),使用重定向時,你可以避免它們是不健康的。

+0

我想我只需將PHP內部的所有鏈接改爲例。com/about/some /,因此無論如何建議;) – JU1CY 2014-10-01 12:56:17

+0

由於某些原因,它給出了錯誤,而不是像localhost/1/about這樣的轉換鏈接,下面是我的htaccess的一部分:RewriteEngine On RewriteRule ^([A- Za-z0-9 - ] +)/?$ index.php?cat = $ 1 [L] RewriteRule ^([A-Za-z0-9-] +)/([A-Za-z0-9-] +)/?$ index.php?cat = $ 1&show = $ 2 [L] RewriteCond%{REQUEST_FILENAME} index.php $ RewriteCond%{QUERY_STRING} cat =([a-zA-Z0-9 - ] +) RewriteRule^http:// localhost/1 /%1 /? [L,R = 301] – JU1CY 2014-10-01 13:19:31