2009-06-30 47 views
5

Tôi muốn làm việc với các trang không có dấu gạch chéo. Vì vậy, bây giờ tôi muốn URL của tôi có dấu gạch chéo theo sau để chuyển hướng (sử dụng .htaccess) đến cùng một URL mà không có dấu gạch chéo.Xóa dấu gạch chéo theo sau

tôi có hai tập tin .htaccess:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteRule (.*) public/$1 
</IfModule> 

Và một trong thư mục công cộng của tôi:

DirectoryIndex index.html index.php 
Options -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On   
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 

Tôi đã thử thêm các nguyên tắc sau vào file .htaccess trong thư mục công cộng:

RewriteRule (.*)/$ $1 [R,L] 

Nhưng sau đó: example.com/public/page/view/2/

Chuyển hướng đến: example.com/**D:/webserver/**public/page/view/2

Mà rõ ràng không phải là những gì tôi muốn ...

+0

Tôi không chắc chắn cách khắc phục sự cố của bạn, nhưng tôi không chắc đây có phải là điều bạn nên làm hay không. Từ sự hiểu biết của tôi yêu cầu một url như thế này: http://www.example.com/myDir chuyển hướng người dùng theo cách tình cờ tới http://www.example.com/myDir/. Chuyển hướng bổ sung này có thể tránh được bằng dấu gạch chéo. Dấu gạch chéo đó xác định dứt khoát rằng "myDir" là một thư mục thay vì một tệp. – nikmd23

+0

Bạn có nói rằng dấu gạch chéo sau là một phần của một số ký hiệu chính thức/tiêu chuẩn/mặc định. Trong trường hợp đó, tôi có một câu hỏi tương tự. Làm thế nào tôi có thể chuyển hướng để thêm dấu gạch chéo ;-) – Erik

+0

Vì bạn không thực sự cố gắng chuyển hướng đến một thư mục, dấu gạch chéo ở cuối không giúp bạn chút nào - trên thực tế, nó không làm bất cứ điều gì một cách hoặc khác. Bạn chỉ nên đi với bất cứ điều gì bạn hài lòng và nhất quán trong việc sử dụng của bạn – Fake51

Trả lời

1

tại sao y Bạn có vài tệp .htaccess? Chuyển hướng của ai đến công khai/$ 1 được lưu trữ ở đâu? Bạn có thể sẽ phải đối mặt với những chỉ thị của RewriteRule làm phức tạp mọi thứ cho bạn.

Mà không biết thiết lập của bạn đó là khá khó để nói như thế nào bạn nên sử dụng viết lại - bạn có thể xác định được điều gì thực sự đã tìm như thế nào?

+0

Tôi đã giảm tất cả thành một tệp .htaccess. Khi gỡ lỗi, tôi nhận thấy rằng một số trình duyệt đã tự động thêm dấu gạch chéo vì một số lịch sử của các trang đã truy cập. Xóa lịch sử internet của tôi, thêm một lần viết lại và ghi đè đã thực hiện thủ thuật. – Erik

1

Các bạn đã thử thêm :

RewriteBase /public 

đến .htaccess tập tin trong thư mục công cộng, để có được:

<IfModule mod_rewrite.c> 
    RewriteEngine On    
    RewriteBase /public 

    RewriteRule (.*)/$ $1 [R,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 
+0

Chỉ cần thử, nhưng nó sẽ không chuyển hướng. – Erik

+0

Bạn có nghĩa là nó chuyển hướng mà không có dòng này, nhưng không chuyển hướng với nó? Ngoài ra, nó không rõ ràng từ câu hỏi của bạn, nơi bạn đặt 'RewriteRule (. *)/$ $ 1 [R, L]' trong tập tin '.htaccess'. –

+0

Với mã của bạn, tôi nhận được các kết quả sau: example.com/page/view/1 >> Lỗi 404 example.com/page/view/1/ >> Chuyển hướng thành example.com/public/page/ xem/1 và hiển thị thông báo 404 – Erik

1

Đây là một ví dụ từ tài liệu Apache mà bạn có thể sử dụng để giải quyết vấn đề của bạn:

Trailing Vấn đề Slash

Mô tả:

Tất cả các webmaster có thể hát một bài hát về vấn đề dấu gạch chéo trên các URL tham chiếu các thư mục. Nếu chúng bị thiếu, máy chủ kết xuất lỗi, vì nếu bạn nói/~ quux/foo thay vì/~ quux/foo/thì máy chủ tìm kiếm một tệp có tên foo. Và bởi vì tập tin này là một thư mục nó phàn nàn. Trên thực tế nó cố gắng sửa chữa nó trong hầu hết các trường hợp, nhưng đôi khi cơ chế này cần phải được mô phỏng bởi bạn. Ví dụ sau khi bạn đã thực hiện rất nhiều rewritings URL phức tạp để các script CGI, vv

Giải pháp:

Các giải pháp cho vấn đề tế nhị này là để cho server thêm dấu gạch chéo tự động. Để làm điều này đúng, chúng tôi phải sử dụng chuyển hướng bên ngoài, vì vậy trình duyệt yêu cầu chính xác hình ảnh tiếp theo, v.v. Nếu chúng tôi chỉ viết lại nội dung, điều này sẽ chỉ hoạt động đối với trang thư mục, nhưng sẽ bị sai khi bất kỳ hình ảnh nào được đưa vào trang này với các URL tương đối, bởi vì trình duyệt sẽ yêu cầu một đối tượng in-lót. Ví dụ: yêu cầu cho image.gif trong /~quux/foo/index.html sẽ trở thành /~quux/image.gif mà không có chuyển hướng bên ngoài!

Vì vậy, để làm thủ thuật này chúng ta viết:

RewriteEngine on 
RewriteBase /~quux/ 
RewriteRule ^foo$ foo/ [R] 

Các điên và lười biếng thậm chí có thể làm như sau trong top cấp tập tin .htaccess của homedir của họ. Nhưng lưu ý rằng điều này tạo ra một số chi phí xử lý.

RewriteEngine on 
RewriteBase /~quux/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$ $1/ [R] 

Source

2

Wordpress chuyển hướng tùy thuộc vào những gì cấu trúc permalink bạn. Vì vậy, bất kỳ thay đổi nào đối với .htaccess sẽ giúp ích rất ít vì Wordpress sẽ thêm/xóa chúng cho bạn và tạo thành một wp_redirect() sau khi .htaccess thực hiện mọi thứ. Trong trường hợp xấu nhất bạn kết thúc với một vòng lặp chuyển hướng.

Giải pháp là tắt tính năng chuyển hướng Wordpress bằng cách sử dụng.

// perhaps an if(is_something()) before here ... 
add_filter('redirect_canonical', '__return_false'); 

Bạn nên bọc bên trong câu lệnh if hoặc tại đó bạn thực hiện kiểm tra một trang/thư mục nhất định/v.v. Đặt trực tiếp ở trên trong tệp chức năng của bạn sẽ tắt chuyển hướng wordpress và có thể phá vỡ mọi thứ.

+0

Hoàn hảo. Cảm ơn! –

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