Tôi đang cố gắng chuyển hướng URL cơ bản cho URL đẹp và do hình ảnh, CSS, v.v. cũng nằm trong cùng một đường dẫn mà tôi cần đảm bảo rằng nếu URL là được truy cập mà không có dấu gạch chéo, nó được thêm tự động.Cách thực hiện chuyển hướng mod_rewrite sang URL tương đối
này hoạt động tốt nếu tôi đặt URL tuyệt đối như thế này:
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ http://www.mydomain.com/myParentDir/$1/ [R,nc,L]
Nhưng nếu tôi thay đổi này đến một URL tương đối, vì vậy mà tôi không cần phải thay đổi nó mỗi khi tôi di chuyển những thứ trong các thư mục , điều này đơn giản là không hiệu quả.
Đây là những gì tôi đã cố gắng và tất cả không làm việc, hoặc chuyển hướng tôi đến đường dẫn thư mục nội bộ thực tế của máy chủ như/public_html/...:
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ ./myParentDir/$1/ [R,nc,L]
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ myParentDir/$1/ [R,nc,L]
đúng cách để làm một là gì chuyển hướng URL để nếu người dùng nhập vào một cái gì đó như:
http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir
ông được chuyển hướng đến (thông qua HTTP 301 hoặc 302):
http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir/
Cảm ơn.
EDIT: Thêm một số chi tiết khác vì nó có vẻ không rõ ràng. Cho phép nói rằng tôi đang triển khai một thư viện và tôi muốn có các URL đẹp bằng cách sử dụng mod_rewrite. Vì vậy, tôi muốn có URL như sau:
http://www.mydomain.com/somedir/galleries/cats
mà hiển thị thumbnail của mèo, trong khi:
http://www.mydomain.com/somedir/galleries/cats/persian
trong đó cho thấy một hình ảnh từ hình thu nhỏ của tất cả những con mèo, tên là Ba Tư. Vì vậy, trong thực tế cấu trúc thư mục vật lý và viết lại sẽ như sau:
http://www.domain.com/somedir/gallery.php?category=cats&image=persian
Vì vậy, những gì tôi muốn làm là đặt một tập tin .htaccess trong/somedir mà bắt tất cả các yêu cầu thực hiện để/phòng trưng bày và tùy thuộc vào thư mục con ảo sau đó, sử dụng chúng như placeholders trong viết lại, với các quy tắc 2 viết lại:
RewriteRule ^galleries/(A-Z0-9_-]+)/$ ./gallery.php?category=$1 [nc]
RewriteRule ^galleries/(A-Z0-9_-]+)/+([A-Z0-9_-]+)$ ./gallery.php?category=$1&image=$2 [nc]
Bây giờ vấn đề là kịch bản bộ sưu tập trên thực tế cần một số CSS, Javascript và hình ảnh, tọa lạc tại http://www.domain.com/somedir/css, http://www.domain.com/somedir/js, và http://www.domain.com/somedir/images tương ứng.
Tôi không muốn mã hóa bất kỳ URL tuyệt đối nào, vì vậy CSS, JS và Hình ảnh sẽ được giới thiệu bằng cách sử dụng các URL tương đối, (./css, ./js, ./images v.v.). Vì vậy, tôi có thể làm URL viết lại như sau:
RewriteRule ^galleries/[A-Z0-9_-]+/css/(.*)$ ./css/$1 [nc]
Vấn đề là kể từ http://www.domain.com/somedir/galleries/cats là một thư mục ảo, bên trên chỉ hoạt động nếu sử dụng các loại:
http://www.domain.com/somedir/gallaries/cats/
Nếu người dùng bỏ qua các dấu gạch chéo mod_dir sẽ không thêm nó bởi vì trong thực tế thực tế thư mục này không thực sự tồn tại.
Nếu tôi đặt một viết lại chuyển hướng với các URL tuyệt đối hoạt động:
RewriteRule ^galleries/([A-Z0-9_-]+)$ http://www.mydomain.com/subdir/galleries/$1/ [R,nc,L]
Nhưng tôi không muốn có tiền tố URL hardcoded vì tôi muốn để có thể đặt này trên bất cứ điều gì tôi muốn miền trong bất cứ subdir tôi muốn, vì vậy tôi cố gắng này:
RewriteRule ^galleries/([A-Z0-9_-]+)$ galleries/$1/ [R,nc,L]
Nhưng thay vào đó nó chuyển hướng đến:
http://www.mydomain.com/home/myaccount/public_html/subdir/galleries/theRest
mà rõ ràng không phải là những gì tôi muốn.
EDIT: làm rõ hơn nữa
Giải pháp Tôi đang tìm kiếm là để tránh hardcoding tên miền hay đường dẫn thư mục trong .htaccess. Tôi đang tìm một giải pháp mà nếu tôi gói các .htaccess với phần còn lại của các kịch bản và các nguồn lực, bất cứ nơi nào người dùng giải nén nó trên máy chủ web của mình nó hoạt động ra khỏi hộp. Tất cả các công trình như vậy ngoài vấn đề dấu gạch chéo sau này.
Vì vậy, mọi giải pháp liên quan đến việc mã hóa cứng thư mục mẹ hoặc đường dẫn của máy chủ web trong .htaccess theo bất kỳ cách nào không phải là những gì tôi đang tìm kiếm.
@DoktorJ Bài chỉnh sửa của tôi có trả lời câu hỏi của bạn không? –
Bạn nên chọn câu trả lời được chấp nhận, nếu có bất kỳ câu trả lời nào ở đây được trợ giúp. – sjas