2014-11-14 69 views
2

我有一個.htaccess它做了基本重寫它看起來像下面這樣:PHP現代重寫

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php?url=$1 [L,QSA] 

下一個條件是從URL中移除www.,看起來像這樣:

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

問題是,當我打電話給一個鏈接,如:

http://somesite.com/category/subcategory/?id=123 

並添加www.手動,重寫URL這樣:

http://www.somesite.com?url=category/subcategory/?123 

頁劇照負載,但是,我已經被告知這是可怕的搜索引擎優化。任何想法如何解決這個問題?

+0

您的框架或CMS中是否有其他'.htaccess'規則?你使用的是什麼框架或CMS?請發佈完整的'.htaccess',以便我們看到您按照何種順序放置規則。 – Prix 2014-11-14 13:50:49

+0

這不是一個實際的框架。在一個小項目上工作。是的,這就是htaccess中的所有規則。 – Jay 2014-11-14 13:53:15

+0

您是否嘗試在.htaccess中更改此規則的位置?首先「刪除」萬維網,然後重寫SEO炒炸彈? – newman 2014-11-14 14:12:20

回答

3

您當前的問題是,你有你的主要搜索引擎的規則後,您WWW重定向,這是幕後發生的事情:

  1. 您訪問http://somesite.com/category/subcategory/?id=123
  2. 你的規則,它在內部重定向到index.php?url=category/subcategory/?id=123
  3. 你的最後一條規則是在沒有www的情況下重定向,也將發生並最終將其重定向到:

    http://somesite.com/?url=category/subcategory/?id=123 
    

爲了解決這個問題,你會需要你的規則如下:

RewriteEngine on 

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

RewriteRule ^index.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php?url=$1 [L,QSA] 

這讓我們想到你的第二個問題,你已經使用301重定向等等您瀏覽器緩存了一些重定向您需要暫時使用其他瀏覽器來測試您的更改,最好還有一個尚未用於訪問該網站的更改,同時清除該瀏覽器的緩存並等待它完全清除。

一旦您的默認瀏覽器的緩存已清除,您可以像往常一樣使用它,你應該得到相同的響應。

+1

一個很好的解釋。我將添加到OP中,一條好的經驗法則是在重寫之前(您將請求靜靜地傳遞到新的目標端點)執行重定向(實際上在瀏覽器中更改URL的位置)。 – 2014-11-14 14:52:50

+0

@MikeBrant:P你描述得比我想的要好。 – Prix 2014-11-14 14:55:51

+0

感謝您花時間研究它。那是(y)! – Jay 2014-11-14 15:06:24