2010-12-02 47 views
1

你好傢伙我想知道爲什麼一些使用PHP(或任何其他服務器端腳本語言)網站不顯示擴展名甚至文件。 喜歡這個網址stackoverflow.com/questions/ask 還有一些網站從用戶獲取數據,比如說讓用戶發佈一些隨機帖子的網站,好吧,當我們點擊該帖子時,它會發送給我們: domain.com/post/what-user-posted-goes-here 如果我們嘗試去domain.com/post/,我們會得到一個未找到頁面的錯誤。爲什麼一些網站的網站不顯示.php擴展只顯示像stackoverflow.com/questions/ask

我在問這個問題,因爲我想知道什麼是使用的方法,它與PHP有關嗎?因爲我想用它。

回答

0

如果你把domain.com/post/它會尋找一個index.php或index.html例如。如果找不到其中的一個,它將會出錯。它沒有真正與PHP有關:)

0

許多網站使用一種網關腳本的這條路線的所有請求。通常在這種情況下,使用類似mod_rewrite的命令將請求定向到該腳本。

例如:http://example.com/blog/my-first-posthttp://example.com/blog/my-second-post都可以被重寫爲/index.php。然後,該索引腳本可以解析請求以確定是否正在請求博客帖子,以及哪個特定帖子。

2

這是因爲他們使用Apache的mod_rewrite

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

您可以輕鬆地重新路由的網址與它,所以如果你想你可以/test/pages/test.html例如。

RewriteEngine on 
RewriteRule test /pages/test.html 

通常,人們用regex進行動態重路由,例如:

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

所以/page/test-page將顯示index.php?page=test-page

+0

我知道這是一個很舊的帖子,但是,應該選擇這個作爲正確的答案。儘管Alex所選擇的答案並不完全錯誤,但它忽略了具有類似example.com/my-article與example.com/my-article.php的url的觀點。這種混淆可以幫助您增加網站的安全性。 – 2014-02-20 15:55:10

0

Web服務器控件哪些請求被髮送給哪個節目。最簡單的方法就是您所描述的,當domain.com/folder/file.ext被髮送到文件的處理程序時。對於.php文件,這可能是PHP,或者對於HTML文件,文件可能會按原樣顯示。

另一種可能性是benhowdle89所描述的,這也是大多數Web服務器的默認行爲 - 如果您要求domain.com/folder/,它會檢查index.html或index.php或類似的東西。

在SO等網站的情況下,映射是不同的。網絡服務器被配置爲接受如/questions/4339829/why-some-urls-of-websites-doesnt-show-the-php-extention-just-shows-words-like的請求,並將該請求發送給知道如何處理它的程序。例如,它可能類似於/scripts/displayquestion.php?question_id=4339828,或者它可以是任何其他編寫來處理請求的程序。這可能是一個PHP腳本,也可能是一個應用程序服務器,或者是用另一種語言編寫的腳本。

0

實現這一點的方法很簡單。當用戶指向一個目錄時,服務器將查找該目錄的根目錄(index.php)。

因此,在您的示例domain.com/post/中,您將擁有一個名爲post的目錄(文件夾)。在該文件夾中,您將擁有index.php。服務器將返回該文件夾中的index.php文件,該URL不會顯示php文件,只是URL domain.com/post/。

如果服務器要顯示php文件,它看起來像這樣:domain.com/post/index.php,但index.php不顯示。

與其他人一樣,目的是爲了SEO(搜索引擎優化),以及在您改變自己開發網站的情況下的安全措施,您不會失去您的搜索引擎優化鏈接或當人們爲您的網站添加書籤時創建死鏈接