2012-05-05 38 views
1

我試圖讓我的網站將其他網頁顯示爲www.example.com/pageone/鏈接,而不是www.example.com/pageone.html。.htaccess如何工作?

問題是,我正在閱讀如何使用.htaccess來做到這一點,它讓我感到困惑,因爲我不明白這些命令。

我明白了第一步,但是,在.htaccess文件中寫的:

RewriteEngine On 

這一步後,我根本不知道什麼-d也不{} REQUEST_FILENAME也不^(! *)和所有的編程文本。有沒有我可以參考的文檔?

或者任何人都可以給我提供關於如何.htaccess文件配置明白,如果我想去

www.example.com/pageone.html 

,我只需要鍵入的URL的簡單解釋是

www.example.com/pageone/ 

和PHP文件等?

+1

..和我使用谷歌,僅供參考 - 我認爲它只是我的關鍵字有些遲鈍。我似乎無法找到關於此的任何文檔 –

+1

您想要使用的關鍵字是'mod_rewrite':http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html – AlienWebguy

回答

4

首先, e Official Documentation。爲了解決您的具體問題,我會去這樣說:

RewriteEngine on #Turn on rewrite 

RewriteCond %{REQUEST_FILENAME} !-f #If requested is not a filename... 
RewriteCond %{REQUEST_FILENAME} !-d #And not a directory 
RewriteRule ^([^/]+)/?$ /$1.html [L] #Preform this redirect 

RewriteCond唯一適用於下一以下規則。如果你有多個規則,你需要爲每個規則寫出條件。

現在,Apache服務器會匹配請求的路徑(www.example.com/之後的所有內容),以查看它是否符合您指定的任何規則。在這種情況下,僅存在一個:

^([^/]+)$ 

這個正則表達式任何數量的字符,這是不削減/的,接着任選的結尾的斜線一致。如果找到匹配項,它會將請求重寫爲第二個參數:/$1.html,$1的含義是「括號內的任何內容匹配」,在我們的例子中是所有非斜槓字符。

[L]標誌告訴重寫引擎在匹配規則時停止查找規則。

因此得出結論,www.example.com/whatever/將sliently在服務器改寫爲www.example.com/whatever.html

+0

對,我想我會開始學習更多關於這個mod_rewrite的東西。感謝您的鏈接和解釋! –

+0

嗯,我可以爲PHP做這個嗎?或者對於這個問題的任何其他擴展? –

+0

@RenoYeo:這是Apache的東西,它屬於你正在運行的服務器。如果您希望PHP(即服務器端語言)控制事物,則可以將所有URL重寫爲PHP中的單個輸入點,然後從那裏控制事物。 (將www.example.com/some/pages/重定向到www.example.com/index.php?route=some/pages/並使用PHP來控制它)。 –

2
RewriteEngine on 
RewriteBase/

RewriteRule ^([^/]+)$ /$1.html 

這應該是你需要的這個重寫。它基本上說,「任何不是正斜槓將被分配給變量$1。所以/富將指向/foo.html

+0

OP想要解釋它是如何工作的。給出答案是很好的,但如果OP不理解他想要的方式,那就毫無價值。 –

+0

這就是爲什麼我鏈接到41分鐘前的評論中的文檔:) – AlienWebguy

+0

對,什麼是RewriteBase /?這是否意味着它只是在URL的後面添加一個/? –

1

對於官方文檔,你可以看看這裏Apache httpd mod_rewrite
在谷歌,你可以搜索關鍵字如url rewriting tutorial
奇怪的字符稱爲正則表達式,它不是一個容易學習的部分,但有大量的關於它們的教程
PS:這不是一個直接的答案,但有些東西讓你走得更遠並瞭解url重寫的工作原理。

+0

很基本的答案,但仍然相關。 –