2009-01-20 24 views

Trả lời

1
RewriteEngine On 

RewriteRule ^([0-9a-zA-Z]+)$ $1.jsp 

Trong .htaccess của bạn nên viết lại tất cả các URL để .jsp. Vì vậy, search.jsp sẽ chỉ là tìm kiếm, như bạn đã mô tả.

+0

Đó không phải là câu trả lời mà anh ấy đang tìm kiếm nhưng tôi nghĩ đó là cách tiếp cận đơn giản nhất và do đó tốt nhất. +1 –

+0

Tôi không có chuyên gia regex, nhưng điều này không chỉ hoạt động nếu tệp jsp có chứa chữ cái hoặc số trong tên? Ví dụ: 'advanced-search.jsp' sẽ không hoạt động. – styfle

+0

@styfle ... yes ... thêm \ - trước] để hỗ trợ dấu gạch ngang –

0

Tôi không phải là chuyên gia JSP nhưng tôi nghĩ bạn có thể xác định ánh xạ URL trong web.xml để cung cấp bí danh cho servlets và jsps của bạn.

10

Bạn có thể tạo một ánh xạ servlet như thế này:

<servlet-mapping> 
    <servlet-name>MappingServlet</servlet-name> 
    <url-pattern>path/*</url-pattern> 
</servlet-mapping> 

Url-mẫu phải được chỉnh sửa cho phù hợp với nhu cầu của bạn. Bạn cần tất nhiên để tạo servlet để ánh xạ url tới jsp thực tế. Kỹ thuật này được sử dụng bởi hầu hết các khung công tác MVC.

+0

Thay thế thẻ mẫu URL ở trên bằng thẻ jsp-file và đưa vào nội dung đó là URL đẹp thực tế mà bạn muốn ... Có không cần phải viết lại URL apache - đặc tả servlet hỗ trợ chính xác những gì bạn muốn. Cách tiếp cận thích hợp là những gì tôi đã mô tả ... –

+0

Xin chào! Tôi rất quan tâm đến cách tiếp cận của bạn, bạn có thể xây dựng một chút về nó.thanks –

+0

Spring MVC ví dụ sử dụng kỹ thuật này. Bạn có thể xem mã nguồn để biết chi tiết. Spring MVC thực hiện một khuôn khổ đầy đủ, vì vậy nó sẽ là một giải pháp phức tạp. Trong biểu mẫu đơn giản nhất, MappingServlet sẽ kiểm tra đường dẫn yêu cầu, trích xuất tên của khung nhìn và tải nó từ một kho lưu trữ phù hợp. – kgiannakakis

2

Lập bản đồ .jsp làm servlet, nhưng sử dụng thẻ < jsp-> thay vì một thẻ ánh xạ url >.

<servlet> 
    <servlet-name>myjsp</servlet-name> 
    <jsp-file>/myjsp.jsp</jsp-file> 
</servlet> 
4

UrlRewrite là giải pháp khung độc lập dựa trên Java linh hoạt.

Điều này tốt hơn bản đồ Servlet trong web.xml, vì đó là quá giới hạn trong những gì bạn có thể làm, và tốt hơn giải pháp dựa trên Apache vì nó là một phần của ứng dụng web của bạn, do đó bạn không cần đặt Apache trước của máy chủ ứng dụng của bạn.

1

Nếu bạn chọn quy tắc ghi đè Apache, thay vì ánh xạ/bộ lọc máy chủ ứng dụng (như tôi đã làm), bạn cũng có thể muốn làm nhiều hơn là chỉ tìm "^ ([0-9a-zA-Z] +) $ "

Bạn có thể muốn xác nhận url không phải là thư mục hoặc tệp tồn tại nếu apache đang ở phía trước và phân phối tài nguyên không phải jsp. Và xác nhận rằng JSP tồn tại và thực hiện chuyển qua chứ không phải chuyển hướng và nối thêm bất kỳ chuỗi truy vấn nào có thể.

RewriteCond %{REQUEST_URI} !^/.*\.(jsp)$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.jsp -f 
RewriteRule ^(.+)$ /$1.jsp [PT,QSA,L] 

Và để đảm bảo rằng người dùng chỉ thấy điều này qua/tìm kiếm, không /search.jsp sau đó bạn muốn viết lại hoàn toàn ngược với cũng

RewriteRule ^(.+)\.jsp$ $1 [R=301,QSA,L] 
RewriteRule ^(.+)index$ $1 [R=301,QSA,L] 

Đây là một ý tưởng tốt cho mục đích SEO quá rằng công cụ tìm kiếm không giúp bạn sao chép nội dung ở nhiều url.

3

Sử dụng ánh xạ servlet này trong tệp web.xml của bạn.

<servlet> 
    <servlet-name>search</servlet-name> 
    <jsp-file>/search.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>search</servlet-name> 
    <url-pattern>/search</url-pattern> 
</servlet-mapping> 
0

Tôi có một jsp nằm ở dữ liệu/feed.jsp Thêm này để web.xml của tôi có nghĩa là tôi có thể truy cập nó ở dữ liệu/thức ăn chăn nuôi ...

<servlet> 
    <servlet-name>feed</servlet-name> 
    <jsp-file>/data/feed.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>feed</servlet-name> 
    <url-pattern>/data/feed</url-pattern> 
</servlet-mapping> 
Các vấn đề liên quan