2012-05-05 29 views
7

Tôi muốn www.example.com/about.php chỉ được www.example.com/aboutLoại bỏ .php phần mở rộng tập tin với tập tin .htaccess

Tôi tạo ra một tập tin .htaccess và đặt nó trong thư mục gốc của máy chủ của tôi. Tôi đang sử dụng lưu trữ được chia sẻ trên linux. Phiên bản PHP 5.2

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

Dường như mã này sẽ hoạt động bình thường, nhưng vì một lý do nào đó mã này không hoạt động. Tôi gặp lỗi 404 khi cố gắng điều hướng đến trang không có phần mở rộng .php.

Dưới đây là đánh dấu của tôi quá:

<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--> 

Bạn có thể thấy tôi đã cố gắng sử dụng phần mở rộng php trong liên kết và cũng đã cố gắng mà không có. Các liên kết với phần mở rộng php đi đến trang, nhưng không loại bỏ phần mở rộng.

Tôi đã kiểm tra xem liệu module_rewrite đã được bật chưa bằng cách đặt vào một số rác và trả lại lỗi 500.

+0

nếu lưu trữ của bạn được chia sẻ, hơn thử bài viết này để làm cho nó thực hiện. http://www.kvcodes.com/2016/02/godaddy-remove-php-extension/ – Kvvaradha

+0

Tôi đã khái quát câu hỏi này, vì nó dường như không cụ thể với godaddy hoặc php. – Braiam

Trả lời

0

Quy tắc viết lại của bạn không chính xác, đó là vòng sai. Hãy thử thay thế này:

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

cảm ơn cho đầu vào nhưng không có may mắn ở đó. Vẫn gặp lỗi 404. –

7

Vì vậy, sau một thời gian dài với google, tôi cuối cùng đã tìm ra điều này. Điều này làm việc với Godaddy chia sẻ lưu trữ. Nó loại bỏ các phần mở rộng tập tin php nên http://yoursite.com/about.php trở thành 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 

(loại bỏ ý kiến ​​trước khi tải lên máy chủ)

+2

Đây là ONE ONE duy nhất làm việc cho tôi! cảm ơn! – FoamyMedia

+0

Nhưng đây không phải là giải pháp đúng vì nó ghi đè bất kỳ tệp '/ not-found' nào vào'/not-found.php' ngay cả khi tệp php đó không tồn tại trong hệ thống. – anubhava

35

Sử dụng mã này cho ẩn/loại bỏ .php mở rộng:

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

Đó là đoạn mã duy nhất có hiệu quả đối với tôi. Cảm ơn bạn. – Chris

+2

Tùy chọn này là lựa chọn duy nhất giúp tôi với Godaddy. Cảm ơn @anubhava – Ryan

+1

Các giải pháp khác cho phép trang hiển thị có hoặc không có tiện ích. Đối với GoDaddy, đây là giải pháp duy nhất có thể xóa phần mở rộng .php bất kể liên kết là gì. Cảm ơn. –

4

Tôi có vấn đề này Ngoài ra, nhưng tôi thấy rằng điều này dường như để khắc phục vấn đề .htaccess GoDaddy.

# Fix Rewrite 
Options -Multiviews 

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

Fantastic @John SMith, điều này cũng làm việc cho Site5. – AdamJones

+0

nhưng tôi là người dùng godaddy, của tôi là lưu trữ không giới hạn và không hoạt động ở đây. – Kvvaradha

1

dán trên tất cả mọi thứ trong tập tin .htaccess của tôi làm việc cho tôi ...

## 301 Redirects 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)\.asp$ $1? [R=301,NE,NC,L] 
Các vấn đề liên quan