2012-04-05 144 views
15

我想要的東西,把我的.htaccess文件,將隱藏我的PHP文件.php文件擴展名,所以要www.example.com/dir/somepage會告訴他們www.example.com/dir/somepage.php。如何使用.htaccess隱藏.php網址的擴展名?

對此有任何可行的解決方案?我的網站使用HTTPS,如果這很重要的話。

這是我此刻的.htaccess:

RewriteEngine On 

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

ErrorDocument 404 /error/404.php 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule (.*) $1\.php [L] 
+0

重複:http://stackoverflow.com/a/1760412/209139 – TRiG 2012-04-05 12:01:29

回答

38

使用此代碼在您的.htaccess下DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L,NC] 

## To internally redirect /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME}.php -f [NC] 
RewriteRule^%{REQUEST_URI}.php [L] 
+1

如何排除頁面?這似乎是干擾我的登錄腳本,所以我想從這些重寫中排除該頁面 – ChristopherStrydom 2014-08-08 14:02:02

+0

通常,您可以添加'RewriteCond%{REQUEST_URI}!^ /(page1 | page2)'類型條件。 – anubhava 2014-08-08 14:21:08

+0

謝謝你會試試看。我認爲正在發生的是當頁面被重新加載而沒有擴展時它將丟失變量。有沒有辦法來解決這個問題?就好像它登錄了兩次......我想......一次用電子郵件通過,然後再次沒有。所以我在所有我不能登錄 – ChristopherStrydom 2014-08-08 14:30:06

0

試試這個:

# Unless directory, remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L] 

# Redirect external .php requests to extensionless url 
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L] 

# Resolve .php file for extensionless php urls 
RewriteRule ^([^/.]+)$ $1.php [L]Try: 

參考:

How to hide .php extension in .htaccess

+0

這不工作對我來說,很遺憾。 – Markum 2012-04-05 11:55:27

+0

然後嘗試上面的代碼。 – 2012-04-05 12:00:01

+0

仍然無法正常工作。 – Markum 2012-04-05 12:05:39

2
<IfModule mod_rewrite.c> 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f  # if the requested URL is not a file that exists 
RewriteCond %{REQUEST_FILENAME} !-d  # and it isn't a directory that exists either 
RewriteCond %{REQUEST_FILENAME}\.php -f # but when you put ".php" on the end it is a file that exists 
RewriteRule ^(.+)$ $1\.php [QSA]   # then serve that file (maintaining the query string) 

</IfModule> 

奇怪的是,這個代碼GA在Windows中的XAMPP中嘗試使用HTTP 500錯誤。刪除評論修復了它。所以,移動評論,以便他們在他們自己的路線,而不是在指令相同的路線。

+1

試過這個,它給了我一個500錯誤。 – Markum 2012-04-05 12:10:37

+1

奇數。這個對我有用。 – TRiG 2012-04-05 12:13:57

+1

@Markum。從那以後,我發現一些實現不像代碼那樣喜歡評論。嘗試刪除評論。 – TRiG 2014-03-15 11:24:27

4

刪除PHP擴展

您可以使用代碼/.htaccess:

RewriteEngine on 


RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule^%{REQUEST_FILENAME}.php [NC,L] 

隨着代碼上面,你將能夠訪問/file.php作爲/文件

刪除HTML擴展

RewriteEngine on 


RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule^%{REQUEST_FILENAME}.html [NC,L] 

注:指令「上RewriteEngine敘述」應爲每htaccess的頂部使用一次,所以如果你想要這條規則合併只是刪除從第二條規則就行了。您也可以刪除您選擇的任何其他擴展名,只需將代碼中的.php替換爲它們即可。

快樂htaccessing!

相關問題