2010-08-27 42 views
11

Câu hỏi khá đơn giản nhưng tôi không thể tìm thấy câu trả lời trong nhiều giờ.cần phải thoát khỏi ký tự # (hash/pound) trong .htaccess ghi lại quy tắc

Những gì tôi cần làm là:

RewriteRule ([^#])#(.*) $1\%23$2 

Mà về cơ bản có nghĩa là tôi muốn url thoát khỏi dấu băm freaking mà đến với tôi từ một codepiece bên ngoài.

dấu gạch chéo ngược (\) không hoạt động để thoát khỏi dấu này ... và vui lòng không đề xuất sử dụng %23 thay vì # vì nó không hoạt động.

(%2 3 không phù hợp với một # vì nó chỉ đơn giản không phải là == %23)

Trả lời

7

Phần hash của một URL là không có sẵn cho viết lại. Khi trình duyệt web gửi yêu cầu URL tới máy chủ web, nó sẽ gửi mọi thứ tới dấu băm. Hàm băm chỉ khả dụng trên ứng dụng khách (ví dụ: mã JavaScript có thể nhìn thấy nó).

+0

đây không phải là cách để thoát #, nhưng rõ ràng trong trường hợp của tôi, điều đó không quan trọng. vì vậy tôi gonno đi trước và thiết lập này như được chấp nhận. thanks – kali

+2

Trong khi đúng là phần sau # sẽ không có sẵn trong URL yêu cầu, bạn có thể có nó như là một phần của URL chuyển hướng. Bạn chỉ cần thoát khỏi nó bằng cách sử dụng tùy chọn NE, được đề cập trong một câu trả lời khác. –

+1

@PeterDolberg @Keith Câu hỏi đặt ra là khớp với '#' trong mẫu. Câu trả lời khác có thể giúp những người tìm thấy câu hỏi này từ Google, nhưng đó không phải là câu trả lời hợp lệ cho câu hỏi cụ thể này. 'NE' không liên quan ở đây, và câu trả lời của tôi không phải là" sai lệch ". –

-2

.htaccess

RewriteRule old\.php redirect.php?url=http://example.com/new.php|hash [R=301,QSA,L] 

redirect.php

<?php 
    $new_url = str_replace("|", "#", $_GET['url']); 
    header("Location: ".$new_url, 301); 
    die; 
?> 
23

Tôi chỉ có này làm việc cho một trang web sau một vài bài viết trên diễn đàn này, tôi đang sử dụng một quy tắc viết lại với NE không thoát khỏi và R = 301 chuyển hướng lựa chọn:

RewriteRule ^galleries/([a-zA-Z0-9_-]+)$ /gallery.html#/$1 [R=301,NE,L] 

này chuyển hướng tất cả phòng trưng bày/biến đến /gallery.html#/variable

Chỉnh sửa: Phần quan trọng của quy tắc là NE chỉ thị máy chủ phân tích đầu ra mà không có ký tự thoát. Nếu không có điều này, nó sẽ cố gắng và thoát khỏi # trong quy tắc viết lại mà là những gì mà OP đang hỏi.

+1

vui lòng giải thích thay vì chỉ đưa ra một ví dụ – johannes

+4

Trong khi câu trả lời này chứa thông tin hữu ích thì nó không xuất hiện liên quan đến câu hỏi của OP như được gợi ý. OP đang cố gắng kết hợp một '#' trong RewriteRule _pattern_, trong khi câu trả lời ở trên đang sử dụng một '#' (định danh phân đoạn) trong RewriteRule _substitution_. Điều này hoàn toàn khác. – MrWhite

+0

@ w3dk, trạng thái OP: "Tôi muốn url thoát khỏi dấu băm băm." Bạn làm điều này với NE. – Dave

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