2010-12-15 41 views

回答

3

事情是這樣的:

RewriteCond %{REQUEST_FILENAME} !profile.php 
RewriteRule ^(.*)$ /profile.php?user=$1 [L] 

這將域名後,通過什麼作爲命名user一個GET變量http://www.example.com/profile.php

所以這樣的:

http://www.example.com/User123 

將成爲:

http://www.example.com/profile.php?user=User123 

這會悄然發生,因此當您的服務器看到醜陋的profile.php URL時,瀏覽器仍會向用戶顯示「漂亮」example.com/User123版本。


既然你問對正在發生的事情更全面的解釋,那就是:

RewriteRule有點像if語句。基本上你說「如果請求符合這種模式,請將請求重定向到這個其他文件。」

我們反對的圖案匹配是^(.*)$其分解如下:

  • ^指在任意數量的「開始在字符串的開始尋找匹配
  • .*手段」比賽任何字符(*)(.
  • $指「停止在字符串的末尾匹配。

當你把這些結合在一起,它基本上相當於「相匹配的任何請求。」

.*告訴周圍的mod_rewrite來存儲他們在一個變量圍繞規則的部分匹配任何括號。它們被存儲的變量被稱爲$1(如果我們有多組括號,它們將被存儲在$2$3等等中)。

這個$1變量用於定義在RewriteRule的最後部分指定的新路徑。

RewriteCond就像在RewriteRule周圍拋出另一條if語句。它說「如果這個條件成立,只執行下面的RewriteRule。「

在你的情況說的RewriteCond只有當在URL所請求的文件執行規則(%{REQUEST_FILENAME}不是‘profile.php’

這個含義是,要求」 profile.php「被正常處理,但其他任何請求都被重定向到profile.php

[L]最後只是表示」在此之後不執行任何RewriteRules「。 「Last」。

Clear as mud?

+0

感謝您的幫助,但仍然這不工作它只給我腳本名稱,Ex爲相同的代碼,它給了我:陣列([user] => profile.php) 但是我確定我想和你上面提到的網址一樣http://www.example.com/User123 – Neelesh 2010-12-15 11:16:35

+0

@Neelesh:它應該只給你'[user] =>個人資料。如果您導航到'example.com/profile.php',則使用php。如果你去'example.com/User123',它應該給你'[user] => User123'。 – AgentConundrum 2010-12-15 11:20:53

+0

我正在使用像http:// localhost:81/test/neelesh, 這段代碼給我profile.php數組([的print_r($ _ GET); ?> – Neelesh 2010-12-15 11:23:49

-1
RewriteEngine On 
RewriteRule http://www.example.com/(.*) profile.php?u=$1 
+0

對不起這傢伙不工作.... 順便說一句,謝謝你的幫助... – Neelesh 2010-12-15 11:21:06