2012-09-28 55 views

回答

1

你試圖做錯誤的方式。你不想刪除擴展名。你想重寫擴展的請求到真實的文件。因此,如果用戶類型,因爲它是要求

http://foo.bar/file.html 

要做到這一點,你需要mod_rewrite(或同等學歷),並根據自己的需要設置重寫規則

http://foo.bar/file 

您的服務器將服務。同樣的模塊,還用於製作網址尋找更好的,所以不是

http://foo.bar/script.php?id=34&smth=abc 

你可以有

http://foo.bar/script/id/34/smth/abc 

甚至

http://foo.bar/script/34/abc 

Read more on mod rewrite

+0

這可能是一條評論! –

+0

另一方面是否有可能,如果用戶鍵入一個HTML會刪除它? – telexper

+0

是的,你可以用任何方式重寫。如果你確實需要按照任何目的進行描述,那麼就沒有問題了。但是如果你想實現「漂亮的網址」,那麼按我的方式做會減少問題 –

0

我用這個在.htaccess(index.php文件正在處理的頁面):

RewriteRule ^home/$ index.php?page=home 
// Result: http://domain.com/home/ 

如果你想讓它更加動態:

RewriteRule ^(.*)/$ index.php?page=$1 
// Result: http://domain.com/any-page/ 

更多的數據請求時,您可能需要頁:

RewriteRule ^(.*)/(.*)/$ index.php?page=$1&id=$2 
// Result: http://domain.com/data-page/15/ 

如果你想只得到被叫頁面沒有索引部分:

RewriteRule ^(.*)/$ $1.php 

要刪除擴展用戶添加:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteCond %{REQUEST_FILENAME}\.html -f 
0

你需要做兩件事情。首先,您需要將所有鏈接更改爲無擴展名的網址,然後您需要創建一個301重定向來重定向瀏覽器和漫遊器,這些瀏覽器和漫遊器仍然可能包含舊網址,並擴展到新的好看的網址。這是一個新位置的服務器響應,它不是重寫(這是一個僅在服務器上的內部URI重寫)。

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /(.*)\.(html?|php) 
RewriteRule^/%2/ [L,R=301] 

這使得它如此,當在瀏覽器中有人類型http://www.website.com/page.html,他們重定向到http://www.website.com/page/和新的URL將出現在瀏覽器的地址欄中的URL。

現在,你需要做的是內部的第二件事改變它到有效的資源,因爲/page/不存在,它會返回一個404

# need these so we don't clobber legit requests, just pass them through 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

# now check the extensions 
RewriteCond %{REQUEST_URI} ^/(.*?)/?$ 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule^/%1.php [L] 

RewriteCond %{REQUEST_URI} ^/(.*?)/?$ 
RewriteCond %{DOCUMENT_ROOT}/%1.html -f 
RewriteRule^/%1.html [L] 

RewriteCond %{REQUEST_URI} ^/(.*?)/?$ 
RewriteCond %{DOCUMENT_ROOT}/%1.htm -f 
RewriteRule^/%1.htm [L] 

你只需要把它們放在文檔根目錄下的htaccess文件中。

相關問題