天天看點

URL重寫教程與.htaccess

URL重寫教程與.htaccess

網際網路似乎是一個美麗的地方。不是嗎?

對于我們自己的網站,URL http://www.bieryun.com/page/2将帶您進入文章的網際網路類别的第二頁。盡管看起來很簡單,但這并不适用。原始網址可能類似于

http://www.bieryun.com/blog.php?category=internet&page=2

但是這樣的網址實際上不友善記憶,是以我們使用前面提到的網址。是以,在本文中,讓我們了解如何使用apache的

mod_rewrite 

a2enmod 

建立漂亮的URL ,就像調用它一樣。

在我們開始之前,我假設你知道apache伺服器是什麼,并且已經使用PHP等伺服器腳本語言在網站上工作。

是以我們将在apache上使用URL重寫子產品。它應該預設啟用。如果不是,你可以删除讀取行前面的

#号

LoadModule rewrite_module modules / mod_rewrite.so

來自位于

xampp / apache / conf中

httpd.conf 

檔案  

對于Linux系統,以下指令将啟用它 -

sudo a2enmod rewrite

在這之後,重新啟動你的apache伺服器。

現在我們需要建立一個名為

.htaccess 

的檔案來完成我們的URL重寫工作。是以,隻需建立一個名為

的檔案并儲存在根目錄中即可。

你可以看到我有一個

檔案和一些其他的PHP檔案。 現在讓我們打開.htaccess檔案并編寫一個簡單的重寫規則。

是以,讓我們假設您有一個配置檔案頁面,目前情況是這樣的:當有人通路配置檔案頁面時,他們實際上通路了名為

profile.php 

的檔案 ,URL欄顯示URL為

www.websitename.com/profile.php 

為了讓它在眼睛上更容易一些,如果我們可以删除.php擴充名會更好。要做到這一點,我們會寫出這樣的規則。

RewriteEngine On

RewriteRule    ^profile/?$  profile.php [NC, L]

讓我們打破這一點。

  1. RewriteEngine On  是在你的 檔案中寫入的第一件事。這需要每個檔案隻在一開始寫一次。這隻需将URL重寫為引擎開啟即可。
  2. RewriteRule  定義了一條新規則,任何後面的規則都被認為是URL重寫規則
  3. ^ profile /?$ profile.php  如果你有正規表達式的經驗,你必須已經知道這一點。字元串'個人資料'比對,如果比對,則提供檔案profile.php。

由于我現在在我的本地主機上,這看起來類似于 -

您可以在上面看到,當我通路我的Web浏覽器上的URL 

localhost / profile 

時,我可以通路URL 

localhost / profile.php 

檔案。是以這就是它的工作原理。

  1. [NC,L]  這些實際上是表示特殊含義的标志。 NC表示 不區分大小寫它告訴Apache忽略小寫字母和大寫字元。是以,即使你輸入 localhost / PRofiLE, 你也會看到相同的結果。如果您不包含NC标志,您可能會在某些情況下收到URL未找到的錯誤。 标志告訴Apache,這是最後一次檢查。如果這是比對的,則不需要檢查其他RewriteRule。

是以這是一個URL重寫的簡單例子。現在讓我們說你想通過GET方法傳遞參數。通路某人的個人資料頁面的簡單擷取方法URL就是

localhost/profile.php?username=john

當重寫這個URL時,如果我們可以将它轉換成真的很酷

localhost/profile/john

這将更容易記住,也更清潔。為了實作這一點,我們需要以get變量的形式将username參數傳遞給配置檔案頁面。

RewriteRule    ^profile/([A-Za-z0-9-]+)/?$ profile.php?username=$1

文法與我們之前做過的類似,但是您可以注意到我們已經在這裡通過了username參數。

([A-Za-z0-9 - ] +)

意味着該字元

集中的

任何字元都将被接受。

profile.php?username = $ 1 

意味着profile.php頁面将被提供并且一個名為username的GET變量将被傳遞,這将在

profile / 

後面輸入

您可以看到get變量傳遞給用于顯示輸出的配置檔案頁面。

如果您想要傳遞更多變量,假設您想要一個類似于的URL

産品/食品/ 2

您可以使用以下Rewriterule

RewriteRule    ^profile/([A-Za-z-]+)/([0-9-]+)/?$    products.php?category=?$1&page=$2

你可以看到我們添加了正斜杠和後來的另一個字元集條件。您可以在規則的右側看到URL使用$ 1和$ 2作為GET變量,這些變量的設定優先于它們在重寫URL中的外觀。同樣,您可以使用$ 3,$ 4等。

結論

是以我們讨論了URL重寫并學習了一些技巧。這隻是一個讓你開始的基本教程。從apache自己的網站可以找到更全面的指南。