Tôi đang cố gắng viết một tập hợp các quy tắc mod_rewrite cho phép người dùng của tôi sử dụng một thư mục duy nhất để phát triển các dự án khác nhau và không phải gây rối với việc thêm vhost cho mọi dự án.Apache mod_rewrite tên miền phụ vào thư mục con (thông qua chuyển hướng nội bộ)
Ý tưởng của tôi để thực hiện điều này, là thiết lập "VHost toàn cầu" cho mỗi người dùng duy nhất cần khả năng này (chỉ 3-4), vhost sẽ giống như: .my-domain.com. Từ đó, tôi muốn quảng bá người dùng của tôi để viết mã như thể nó nằm trên một tên miền, chứ không phải trong một thư mục con. Ví dụ: nếu bob đang làm việc trên một dự án có tên 'gnome', tôi muốn URL bob (và bất kỳ ai khác trên mạng nội bộ của chúng tôi) tải để truy cập dự án này là: http://gnome.bob.my-domain.com. Nhưng, những gì tôi muốn Apache làm, là nhận ra rằng "gnome" là một "dự án" và do đó ánh xạ yêu cầu, nội bộ, đến bob.my-domain.com/gnome/.
Tôi đã có những gì tôi nghĩ rằng sẽ làm việc, và nó khá đơn giản, nhưng .. nó không hoạt động! Yêu cầu chỉ đi vào một vòng lặp vô hạn và giữ tiền tố tên miền phụ lên URI yêu cầu được viết lại.
Mã viết lại mod tôi có là:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.bob\.my-domain\.com
RewriteCond %{REQUEST_URI} !^/%1.*
RewriteRule ^(.*)$ /%1/$1 [L]
Tôi đã googled xung quanh một chút về vấn đề này, nhưng tôi chưa tìm thấy bất kỳ giải pháp thực sự mà làm việc. Có ai đã thử điều này - hoặc có thể, có ai có ý tưởng tốt hơn không? Một điều không liên quan đến việc tạo một máy chủ ảo cho mọi dự án (tôi có thiết kế..Tôi nghĩ mọi người sẽ đồng ý rằng một nhà thiết kế không nên tạo máy chủ ảo ..)
Cảm ơn!
Dưới đây là một đoạn trích từ rewrite_log:
[rid#838dc88/initial] (3) [perdir /home/bob/http/] strip per-dir prefix: /home/bob/http/index.html -> index.html
[rid#838dc88/initial] (3) [perdir /home/bob/http/] applying pattern '^(.*)$' to uri 'index.html'
[rid#838dc88/initial] (4) [perdir /home/bob/http/] RewriteCond: input='gnome.bob.my-domain.com' pattern='^([^.]+)\.bob\.my-domain\.com' => matched
[rid#838dc88/initial] (4) [perdir /home/bob/http/] RewriteCond: input='/index.html' pattern='!^/%1.*' => matched
[rid#838dc88/initial] (2) [perdir /home/bob/http/] rewrite 'index.html' -> '/gnome/index.html'
[rid#838dc88/initial] (1) [perdir /home/bob/http/] internal redirect with /gnome/index.html [INTERNAL REDIRECT]
[rid#8392f30/initial/redir#1] (3) [perdir /home/bob/http/] strip per-dir prefix: /home/bob/http/gnome/index.html -> gnome/index.html
[rid#8392f30/initial/redir#1] (3) [perdir /home/bob/http/] applying pattern '^(.*)$' to uri 'gnome/index.html'
[rid#8392f30/initial/redir#1] (4) [perdir /home/bob/http/] RewriteCond: input='gnome.bob.my-domain.com' pattern='^([^\.]+)\.bob\.my-domain\.com' => matched
[rid#8392f30/initial/redir#1] (4) [perdir /home/bob/http/] RewriteCond: input='/gnome/index.html' pattern='!^/%1.*' => matched
[rid#8392f30/initial/redir#1] (2) [perdir /home/bob/http/] rewrite 'gnome/index.html' -> '/gnome/gnome/index.html'
[rid#8392f30/initial/redir#1] (1) [perdir /home/bob/http/] internal redirect with /gnome/gnome/index.html [INTERNAL REDIRECT]
[rid#8397970/initial/redir#2] (3) [perdir /home/bob/http/] add path info postfix: /home/bob/http/gnome/gnome -> /home/bob/http/gnome/gnome/index.html
Đây chỉ là một đoạn mã, có một vài 10s hoặc 100 hoặc lâu hơn dòng apache cơ bản viết lại /gnome/index.html đến/gnome/gnome /gnome/gnome/gnome/index.html, vv trước apache lượt truy cập giới hạn viết lại nó, từ bỏ, và ném lỗi 500
Đã thêm một số thông tin khác từ nhật ký viết lại, hy vọng ai đó đã thử điều này trước đây hoặc có một số đầu vào về cách tôi có thể thực hiện việc này! Thanks guys (and gals) –