2012-04-05 36 views
15

Tôi muốn một cái gì đó để đưa vào tập tin .htaccess của tôi mà sẽ ẩn các phần mở rộng tập tin .php cho các tập tin php của tôi, vì vậy hãy www.example.com/dir/somepage sẽ hiển thị chúng www.example.com/dir/somepage.php.Tôi làm cách nào để sử dụng .htaccess để ẩn tiện ích mở rộng URL .php?

Có giải pháp làm việc nào cho vấn đề này không? Trang web của tôi sử dụng HTTPS, nếu điều đó quan trọng.

Đây là .htaccess của tôi vào lúc này:

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

Nhân bản: http://stackoverflow.com/a/1760412/209139 – TRiG

Trả lời

38

Sử dụng mã này trong .htaccess của bạn dưới DOCUMENT_ROOT:

mở rộng php
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

cách bạn có thể loại trừ các trang? Điều này dường như đang can thiệp vào tập lệnh đăng nhập của tôi vì vậy tôi muốn loại trừ trang đó khỏi những lần viết lại này – ChristopherStrydom

+0

Nói chung, bạn có thể thêm điều kiện loại 'RewriteCond% {REQUEST_URI}! ^/(Page1 | page2)'. – anubhava

+0

Cảm ơn bạn sẽ thử. Những gì tôi nghĩ là xảy ra là khi trang đang được tải lại mà không có phần mở rộng nó là mất các biến. Có cách nào để sửa lỗi này? Nó như thể nó đăng nhập vào hai lần .... Tôi nghĩ ... một lần với email và vượt qua và sau đó một lần nữa mà không có. vì vậy trong tất cả tôi không thể đăng nhập – ChristopherStrydom

0

Hãy thử điều này:

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

tham khảo:

How to hide .php extension in .htaccess

+0

Điều này không có tác dụng đối với tôi, thật không may. – Markum

+0

Hãy thử mã ở trên rồi. –

+0

Vẫn không hoạt động. – Markum

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> 

Nhưng kỳ lạ, mã ga này đã cho tôi lỗi HTTP 500 khi thử trong XAMPP trong Windows. Loại bỏ các bình luận đã sửa nó. Vì vậy, đã di chuyển các ý kiến ​​để họ được trên dòng riêng của họ, thay vì trên cùng một dòng như hướng dẫn.

+1

Đã cố gắng điều này và nó mang lại cho tôi một lỗi 500. – Markum

+1

Tỷ lệ cược. Nó làm việc cho tôi. – TRiG

+1

@Markum. Tôi đã từng thấy rằng một số triển khai không thích nhận xét trên cùng một dòng như mã. Hãy thử xóa nhận xét. – TRiG

4

Remove

Bạn có thể sử dụng mã trong /.htaccess:

RewriteEngine on 


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

Với mã ở trên, bạn sẽ có thể truy cập /file.php dưới dạng/file

mở rộng html Remove

RewriteEngine on 


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

Lưu ý: 'RewriteEngine on' chỉ nên được sử dụng một lần ở đầu mỗi htaccess, vì vậy nếu bạn muốn kết hợp các quy tắc 2 chỉ xóa đi dòng tắc thứ hai. Bạn cũng có thể xóa bất kỳ tiện ích mở rộng nào khác mà bạn chọn, chỉ cần thay thế .php bằng chúng trên mã.

Chúc mừng htaccessing!

Các vấn đề liên quan