2015-10-01 26 views
2

我對.htaccess非常新,我遇到了文件操作的一些問題。 例子:在.htaccess中爲php文件創建重寫規則

http://www.domain.com/upload_pic.php?action=save_pic 

我寫了像

RewriteEngine On 
RewriteRule ^sabc([[email protected]#$-_]*)$ upload_pic.php?action=$1 

中的.htaccess規則我要像期望的結果:

http://www.domain.com/sabc/save_pic 

我怎樣才能得到想要的結果,請糾正我。 htaccess線。

回答

3

將其更改爲:

RewriteEngine On 
RewriteRule ^sabc/(.+)$ upload_pic.php?action=$1 

.+將捕獲/一個或多個字符,被捕獲到$1

+0

可以**(。+)**符號將採取特殊字符? – Amy

+0

是的,它會匹配任何字符 – arco444

+0

嘿最後一個問題arco444 ..什麼是L,QSA或N的含義...我很新的.htaccess – Amy

2

有網站已經在其他幾個導遊,但瞭解它在更好的方式,因爲你是初學者@AMY,我已經爲你寫這個。希望這會對你有用。

大多數動態網站在其URL中包含變量,告訴網站向用戶顯示什麼信息。通常情況下,這給網址像下面,告訴網站上的相關腳本加載產品7號

http://www.domain.com/upload_pic.php?pic_id=7 

的問題,這種URL的結構是URL是不是在所有令人難忘。通過電話很難讀出(你會驚訝有多少人通過這種方式傳遞URL)。搜索引擎和用戶都沒有獲得有關該URL中頁面內容的有用信息。你不能從那個URL中知道那個頁面允許你購買挪威藍鸚鵡(可愛的羽毛)。這是一個相當標準的網址 - 默認情況下,您會從大多數CMS中獲得的排序。與此URL比較:

http://www.domain.com/sabc/7/ 

顯然是一個更乾淨和更短的URL。記住要容易得多,讀起來也容易得多。這就是說,它並不完全告訴任何人它指的是什麼。但我們可以做更多:

http://www.domain.com/sabc/user-navnish/ 

現在我們正在某個地方。你可以從URL中知道,即使它脫離了上下文,你可能在該頁面上找到了什麼。搜索引擎可以將該URL拆分爲單詞(URL中的連字符被搜索引擎視爲空格,而下劃線不是),並且他們可以使用該信息更好地確定頁面的內容。這是一個容易記住的URL並傳遞給另一個人。

不幸的是,如果沒有我們的工作,服務器無法輕易理解最後一個URL。當對該URL進行請求時,服務器需要確定如何處理該URL,以便知道要發回給用戶的內容。 URL重寫是用於將最後一個URL「翻譯」爲服務器可以理解的內容的技術。

爲了實現這個目標,我們需要首先創建一個名爲「.htaccess」的文本文檔來包含我們的規則。它必須完全被命名(不是「.htaccess.txt」或「rules.htaccess」)。這將被放置在服務器的根目錄中(與我們的示例中的「upload_pic.php」相同的文件夾)。那裏可能已經存在一個.htaccess文件,在這種情況下,我們應該編輯它而不是覆蓋它。

RewriteEngine On # Turn on the rewriting engine 
RewriteRule ^sabc/?$ upload_pic.php [NC,L] # Handle requests for "sabc" 

一對夫婦快的項目要注意 - 一切按照.htaccess文件的哈希符號被忽視的一個評論,我建議你使用註釋寬鬆;和「RewriteEngine」行應該只能用於每個.htaccess文件一次(請注意,我沒有在這個代碼示例中包含此行)。

「RewriteRule」這一行是魔術發生的地方。線可以被分解爲5個部分:

  • 重寫規則 - 告知Apache,這樣是指單一 重寫規則。

  • ^/sabc /?$ - 「模式」。服務器將檢查每個請求的網址,以查看該模式是否匹配。如果是,則 Apache將交換請求的URL,以替換後面的「替代」 部分。

  • upload_pic.php - 「替代」。如果上面的模式 與請求匹配,則Apache使用此URL而不是所請求的網址 。

  • [NC,L] - 「標誌」,告訴Apache如何應用規則。在這個 的情況下,我們使用兩個標誌。 「NC」告訴Apache,該規則應該是 不區分大小寫,並且「L」告訴Apache如果使用這一規則,則不再處理規則 。

#爲「SABC」處理請求 - 註釋解釋規則做什麼(可選,但推薦)

上面的規則是重寫一個URL一個簡單的方法,是依據對幾乎所有URL重寫規則。

RewriteEngine On 
RewriteRule ^sabc/(.+)$ upload_pic.php?action=$1 

希望這將有助於您瞭解URL重寫@AMY。

+0

真棒Navnish ...你能告訴我一件事 我怎麼可以寫多個參數,如 '重寫規則^ ques /([0-9] +)/([0-9] +) /([a-zA-Z0-9!@#$ -_] *)$ question.php?page = $ 1&id = $ 2&post = $ 3' 這是工作正常,但我想要簡短的方法,並希望像 http ://www.domain.com/ques/1/12/how-are-you – Amy

+0

真的是你的共享知識絕對是真棒,這個時候非常需要..再次感謝:) – Amy