2012-03-22 115 views
3

htaccess刪除我的網站文件的.php擴展名。刪除.php擴展名(明確書寫)友好的URL

RewriteEngine on 
RewriteBase/
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.*)$ $1.php [L,QSA] 

現在,如果我去我的網站

www.mysite.com/home 

正常工作,它重定向到home.php但網址仍然友好。

但如果我寫這篇文章的網址:

www.mysite.com/home.php 

的home.php供應和URL並不友好。

我該如何避免這種行爲?我希望如果用戶寫www.mysite.com/home.php,URL地址欄中顯示的URL爲www.mysite.com/home

回答

4

你可以請求刪除.PHP像這樣

RewriteCond %{REQUEST_URI} ^/(.*).php$ 
RewriteRule ^(.*)$ %1 [L,QSA] 
+1

這個問題的部分工作。我的主要問題是,如果用戶引入了mysite.com/file.php,我希望URL被重寫爲mysite.com/file – miquel 2012-03-22 12:56:22

+0

是的,上面會將'mysite.com/file.php'重定向到'mysite。 COM /文件「 - 然後意識到無限循環 - http://stackoverflow.com/questions/7823801/remove-php-extention-stop-access-of-url-with-php-extention-and-remove-trailing – scibuff 2012-03-22 13:05:42

+0

謝謝@scibuff。但是可以更改瀏覽器的URL嗎?我仍然無法修改它。 – miquel 2012-03-22 13:25:46

0

您的重寫被忽略,因爲它檢查現有的文件,根據您的規則:

RewriteCond %{SCRIPT_FILENAME} !-f 

我會建議在php中添加一個URL檢查重定向到自己(沒有擴展名)。或者如果有人訪問現有文件,你想顯示404錯誤?

+0

如果我刪除的RewriteCond,會是怎樣的效果呢?我沒有看到任何區別。有沒有一個正確的方法來做到.htaccess,而不是重定向在PHP? – miquel 2012-03-22 12:54:12

+0

它會將所有流量路由到您的文件..但是因爲我懷疑您會有類似home.php.php的東西,它會導致404。那麼apache不能告訴瀏覽器將導航中的URL更改爲更清潔的東西。國防部重寫只是將一個URL請求轉換爲其他人。所以你必須說明你想要什麼邏輯 - 重定向或仍然提供頁面..或404 – 2012-03-22 12:56:28

5

你也可以把這個代碼的.htaccess文件裏:

options +multiviews 

這樣做是搜索可用擴展(。 HTML,.htm和.php我認爲)在當前目錄中。因此,例如,如果您要求/user它會尋找user.php

+0

你的答案肯定是他想要的最好的答案:) – 2012-03-23 09:17:07

+0

Humm,也許不是。如果我放置/用戶,那麼一切正常,它會重定向到/user.php。但是,如果我把/user.php,我想瀏覽器的網址也更改爲/用戶,這就是我想要做的。 – miquel 2012-03-23 17:22:58

+0

你可以添加一個'htaccess'規則來將所有'* .php'重定向到'*',如下所示:'rewriterule ^(。*)\。php $ $ [r = 301,l]'。 (我目前無法測試它,但它應該可以工作)。 – 2012-03-23 21:31:15

8

代碼

RewriteEngine On 
RewriteBase/

# remove enter code here.php; use THE_REQUEST to prevent infinite loops 
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP 
RewriteRule (.*)\.php$ $1 [R=301] 


# remove index 
RewriteRule (.*)/index$ $1/ [R=301] 

# remove slash if not directory 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} /$ 
RewriteRule (.*)/ $1 [R=301] 

# add .php to access file, but don't redirect 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule (.*) $1\.php [L] 
+0

花費數小時嘗試如此多的解決方案,你的作品,並且評論很好。謝謝! – SharkBytes 2016-05-28 04:12:14