2012-05-05 203 views
7

我想www.example.com/about.php僅僅是www.example.com/about刪除.php後綴與.htaccess文件

我創建.htaccess文件,並把它放在根目錄我的服務器。 我正在使用Linux共享主機。 PHP版本5.2

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

看來這段代碼應該可以正常工作,但由於某種原因它並沒有。當我嘗試導航到不帶.php擴展名的頁面時,出現404錯誤。

這裏是我的標記過:

<nav> 
     <div class="container"> 
      <ul> 
       <li><a href="index.php" <?php if (strpos($_SERVER['PHP_SELF'], 'index.php')) echo 'class="current-nav"';?>>home</a></li> 
       <li><a href="about.php">about</a></li> 
       <li><a href="services">our services</a></li> 
       <li><a href="portfolio" <?php if (strpos($_SERVER['PHP_SELF'], 'portfolio.php')) echo 'class="current-nav"';?>>portfolio</a></li> 
       <li><a href="testimonials" <?php if (strpos($_SERVER['PHP_SELF'], 'testimonials.php')) echo 'class="current-nav"';?>>testimonials</a></li> 
       <!--<li><a href="#">client area</a></li>--> 
       <li><a href="contact" <?php if (strpos($_SERVER['PHP_SELF'], 'contact.php')) echo 'class="current-nav"';?>>Contact</a></li> 
       <li><a href="order" <?php if (strpos($_SERVER['PHP_SELF'], 'order.php')) echo 'class="current-nav"';?>><strong>Free Quote</strong></a></li> 
      </ul> 
     </div> 
    </nav><!--/navigation--> 

你可以看到我嘗試使用鏈接中的PHP擴展,並沒有也試過。與PHP擴展的鏈接轉到頁面,但不要刪除擴展名。

我做了一個測試,看是否通過放入一些垃圾並返回500錯誤來啓用module_rewrite。

+0

如果你的主機是共享的,不是試圖這篇文章把它完成。 http://www.kvcodes.com/2016/02/godaddy-remove-php-extension/ – Kvvaradha

+0

我概括了這個問題,因爲它似乎並不是特定於godaddy或php。 – Braiam

回答

0

您的重寫規則不正確,這是錯誤的方式。試試這個,而不是:

RewriteRule ^(.*).php$ /$1 [L,R=301] 
+0

感謝您的投入,但沒有運氣。仍然收到404錯誤。 –

7

所以經過與谷歌長期回合我終於想出了這一個。 這與Godaddy共同主​​辦合作。 它消除了PHP文件擴展名,以便http://yoursite.com/about.php

+2

這是唯一一個爲我工作的人!謝謝! – FoamyMedia

+0

但是,這不是正確的解決方案,因爲即使該系統中不存在該php文件,它也會將所有的「/ not-found」文件重寫爲「/ not-found.php」。 – anubhava

35

使用此代碼隱藏/刪除.php擴展(上傳到服務器之前刪除評論)成爲http://yoursite.com/about

Options -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f #If requested is not a filename... 
RewriteCond %{REQUEST_FILENAME} !-d #And not a directory 
RewriteRule ^(.*)$ $1.php [L]   # perform this redirect 

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] 
+6

這是我工作的唯一片段。謝謝。 – Chris

+2

這個選項是唯一一個爲Godaddy工作的人。謝謝@anubhava – Ryan

+1

其他解決方案允許頁面使用或不使用擴展名進行渲染。對於GoDaddy,這是唯一可以刪除.php擴展名的解決方案,不管鏈接如何。謝謝。 –

4

我有這個問題此外,但我發現這似乎解決了GoDaddy .htaccess問題。

# Fix Rewrite 
Options -Multiviews 

# Mod Rewrite 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 
+0

非常棒@約翰史密斯,這也適用於Site5託管。 – AdamJones

+0

但我是godaddy用戶,我的是無限的託管,而且它不在這裏工作。 – Kvvaradha

1

高於一切粘貼在我的.htaccess文件爲我工作...

## 301 Redirects 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)\.asp$ $1? [R=301,NE,NC,L]