2012-05-25 92 views
0

這種重寫方法的工作原理,但它不強迫網址重寫/重定向到新的網址。強制URL重寫/重定向?

我用這個:

RewriteEngine on 
RewriteRule ^page/([^/\.]+)$ search.php?q=$1 

我可以訪問網址rewrited(項目/頁/等),但舊的網址/鏈接(search.php中Q =等?)不重定向仍然可以訪問。

注意:我使用$_SERVER變體來創建網址,並在本地主機上。

+0

這真的是個問題嗎?那麼可能指向'search.php'的搜索表單呢? –

+0

製作發佈的頁面對我們來說是個大問題。 –

回答

4

你必須重寫項目/頁search.php?爲了隱藏醜陋的網址。

重定向 search.php?到項目/頁面,以便使規範的URL成爲訪問該資源的唯一途徑。

在你的代碼中沒有提到重定向,你只是重寫。

認爲它這樣

  • 重寫隱藏規範的URL(它隱藏他們,這並不能消除它們)背後的醜陋的網址;
  • 重定向以類似於「search.php?已移至項目/頁面,嘗試該鏈接」的消息響應瀏覽器,並且瀏覽器遵循新鏈接;
+0

search.php dosnt真的是一個「用戶搜索」程序..它只能獲得refferal查詢並在數據庫中搜索它們。 但感謝您的筆記。 –

+2

作爲一個搜索引擎優化規則,你不應該有通過一個以上的網址訪問相同的內容。這就是爲什麼你要將www.example.com重定向到example.com,並且在這裏也是有效的。 –

-2

對於重寫規則,您需要一個[R=301]以將其變爲客戶端重定向。否則,它純粹是一個內部重寫,客戶端永遠不會看到url被更改。

例如

RewriteRule ^page/([^/\.]+)$ search.php?q=$1 [R=301,L] 
+0

一個問題:我需要告訴PHP使「/ page」url使用自動化的$ _SERVER變體?我們不想長時間創建。 –

+1

是的,PHP不會知道發生重寫的任何事情,除了在某個地方有$ _SERVER變量的原始未重寫url(不記得名字)。 php將在發送給客戶端的任何內容中生成乾淨的URL,否則客戶端將看到醜陋的查詢var版本。 –

+0

$ _SERVER ['REQUEST_URI']是我認爲的原始請求 –

1

要將所謂的ugly URLs重定向到SEO友好的URL,您需要另一個重寫規則。有你的.htaccess這樣的代碼:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^page/([^/\.]+) search.php?q=$1 [L,QSA,NC] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+search\.php\?q=([^\s]+) [NC] 
RewriteRule^page/%1? [R=302,L] 

一旦你驗證了它的正常工作變動R=302R=301