2009-08-16 52 views
111

Trong PHP, làm thế nào tôi có thể lấy URL của trang hiện tại? Tốt hơn chỉ là các bộ phận sau http://domain.com.Cách lấy URL của trang hiện tại bằng PHP

+0

Xin xem câu trả lời này: http://stackoverflow.com/questions/6768793/php-get-the-full-url/8891890 # 8891890 –

+7

Tôi thấy buồn cười rằng câu hỏi này được đánh dấu là bản sao của câu hỏi khác mặc dù được hỏi hai năm trước đó – cameronjonesweb

+2

@cameronjonesweb Và câu hỏi khác có phạm vi hoàn toàn khác (nhận URL đầy đủ), trái ngược với câu hỏi này chỉ trang hiện tại) – person27

Trả lời

216
$_SERVER['REQUEST_URI'] 

Để biết thêm chi tiết về thông tin có sẵn trong mảng $ _SERVER, hãy xem the PHP manual page for it.

Nếu bạn cũng cần chuỗi truy vấn (các bit sau khi ? trong một URL), một phần đó là trong biến này:

$_SERVER['QUERY_STRING'] 
+5

Bạn cũng có thể sử dụng $ _SERVER ['PHP_SELF'] –

+11

iirc, PHP_SELF và REQUEST_URI sẽ có các giá trị khác nhau nếu trang được chuyển hướng thông qua mod_rewrite - trước đây có đường dẫn đến tập lệnh thực tế, sau này có đường dẫn được yêu cầu ban đầu. – Amber

+1

Err, ít nhất là trong apache của tôi, 2.2.4, với php 5.3, REQUEST_URI có chứa những thứ sau? đã ... – Kzqai

22
$uri = $_SERVER['REQUEST_URI']; 

này sẽ cung cấp cho bạn các thư mục và tập tin tên yêu cầu. Nếu bạn sử dụng mod_rewrite, điều này cực kỳ hữu ích vì nó cho bạn biết trang mà người dùng đang xem.

Nếu bạn cần tên tệp thực, bạn có thể muốn thử $_SERVER['PHP_SELF'], hằng số ma thuật __FILE__ hoặc $_SERVER['SCRIPT_FILENAME']. Sau đó 2 cung cấp cho bạn đường dẫn hoàn chỉnh (từ thư mục gốc của máy chủ), thay vì chỉ là thư mục gốc của trang web của bạn. Chúng rất hữu ích cho việc bao gồm và như vậy.

$_SERVER['PHP_SELF'] cung cấp cho bạn tên tệp tương ứng với gốc của trang web.

$relative_path = $_SERVER['PHP_SELF']; 
$complete_path = __FILE__; 
$complete_path = $_SERVER['SCRIPT_FILENAME']; 
9

Các câu trả lời khác là chính xác. Tuy nhiên, lưu ý nhanh: nếu bạn đang tìm cách lấy nội dung sau ? trong URI, bạn nên sử dụng mảng $_GET[].

0

bạn có thể sử dụng $ _SERVER [ 'HTTP_REFERER'] này sẽ cung cấp cho bạn toàn bộ URL ví dụ: giả sử bạn muốn để có được url của tên trang web www.example.com sau đó $ _SERVER [ 'HTTP_REFERER'] sẽ cung cấp cho bạn https://www.example.com

+0

Tại sao biến $ _SERVER của tôi không chứa mục này ?? – Daria

+1

'$ _SERVER ['HTTP_REFERER']' thực hiện chính xác những gì nó nói trên tin, và đó là lấy URL của trang đã gửi người dùng đến trang ... I.E Người giới thiệu. – Dendromaniac

+6

Những người upvoted câu trả lời này sẽ có một số rắc rối gỡ lỗi mã của họ.'HTTP_REFERER' không phải là trang hiện tại, đó là trang người dùng đã ở trước trang hiện tại. – AliBZ

61

nếu bạn muốn chỉ những phần của url sau http://domain.com, hãy thử này:

<?php echo $_SERVER['REQUEST_URI']; ?> 

nếu url hiện tại là http://domain.com/some-slug/some-id, echo sẽ chỉ trả lại '/ some-sên/some-id'.

nếu bạn muốn toàn bộ url, hãy thử này:

<?php echo 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?> 
+0

trợ giúp cho tôi. cảm ơn – Daria

+13

Nếu bạn không kiểm tra xem liệu HTTPS có được bật không? Tôi thấy chức năng này để kiểm tra: (! Rỗng ($ _ MÁY CHỦ [ 'HTTPS']) && $ _SERVER [ 'HTTPS'] == 'off') 'chức năng isSSL() { \t \t trở \t \t \t \t \t \t || $ _SERVER ['SERVER_PORT'] == 443; \t \t} ' – Dendromaniac

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