2011-07-07 18 views
1

我原本想讓所有我的網址都以無擴展名結束。不幸的是,我已經嘗試了很多htaccess代碼,而我剛剛放棄了。如何將沒有擴展名的所有網址重定向到以.php結尾

所以現在我希望把它因此,如果一個人想在我的網站訪問一個頁面,但忘記輸入.PHP,他/她將被自動重定向到相同的URL,但要以.php

這怎麼辦?謝謝!

回答

0

試試這個的.htaccess:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteRule ^([^\.]+)$ $1.php [L] 

編輯:^([^\.]+)$ $1.php [L]

+0

我已經開始我的htaccess與 RewriteEngine敘述代碼上 RewriteBase/ 會影響我其他htaccess的代碼,如果我在開始時添加選項+的FollowSymLinks?如果是,我該怎麼辦? – user758287

+0

我不認爲它會影響您當前的.htaccess。 它指定的Apache是​​否應該遵循符號鏈接,而尋找一個文件。 例如,如果你有一個文件 '/家庭/ MYDOMAIN/WWW/myfile.html' 這是 '/首頁/ mydomain的鏈接/ somedir/therealfile.html' 然後Apache將只檢索REALFILE .html如果你有這個選項啓用。你試一試。在[http://www.maxi-pedia.com/FollowSymLinks](http://www.maxi-pedia.com/FollowSymLinks) –

+0

嗯,我只是試圖重寫規則^(。*)$ $ 1.PHP [L更多信息]沒有選項,我得到了500錯誤。我添加選項+的FollowSymLinks和我仍然有一個500錯誤。嗯,: -/ – user758287

4

下面是規則:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+)$ $1.php [L,QSA] 
  1. 它會檢查,如果請求的資源是不存在的文件夾。例如:您要求http://www.example.com/help。如果存在這樣的文件夾(/help),則該規則將不執行任何操作(優先考慮文件夾)。 如果你不希望這種行爲,那麼刪除第一行。

  2. 它會在重寫之前檢查是否有這樣的.php文件。例如:您請求http://www.example.com/aboutus,但那裏沒有aboutus.php文件 - 不會發生重寫。

  3. 所有這些要求應該沒有斜線:應該是http://www.example.com/aboutus和NOT http://www.example.com/aboutus/

  4. 規則將子文件夾中的網址以及工作:例如http://www.example.com/pages/help/aboutus將被重寫得很好。

  5. 由於上述檢查規則將不會進入一個重寫環(500號錯誤此規則)

  6. 查詢字符串(頁面參數)將被保留

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

## hide .php extension 
# 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 
RewriteRule^%{REQUEST_URI}.php [L] 
1

作爲對Sun Love的迴應,您發佈的代碼運行良好,除非您有一個沒有文件擴展名的尾部斜線(我收到500錯誤),因爲第一個RegEx與此情況不匹配。

example.com/test.html - 作品(重定向到/測試)

example.com/test - 作品(無重定向)

example.com/test.html - - 作品(重定向到/測試)

示例。COM /測試/ - 不起作用(500錯誤)

有可能是一個更好的辦法做到這一點,但我又增加了重寫條件,解決這個問題:

RewriteEngine on 
Options +FollowSymLinks -MultiViews 
RewriteBase/

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

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)/\s 
RewriteRule^%1 [R=301,L] 

## To internally redirect /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [L] 
相關問題