2009-05-14 34 views
9

phương pháp tốt nhất để viết lại bất cứ điều gì bên dưới "/ some/subdir" là gì để "/ some/subdir/dự án" như từ này:.htaccess Rewrite URL để thư mục con

http://www.mydomain.com/some/subidr/test/ 

... như thế này:

http://www.mydomain.com/some/subdir/projects/test/ 

Tôi đã tìm thấy similar question được đăng, nhưng giải pháp này dường như không hoạt động trong trường hợp của tôi. nỗ lực hiện tại của tôi cho đến nay (mà dường như không làm việc):

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/projects/.*$ 
RewriteRule ^(.*)$ /projects/$1 [L] 

EDIT: tôi quên đề cập đến các tập tin .htaccess sẽ phải ngồi trong/some/subdir như tôi không có viết quyền truy cập vào thư mục gốc của máy chủ.

Trả lời

11

Đây là giải pháp cuối cùng tôi đã đến làm việc:

RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/some/subdir/projects/.*$ 
RewriteRule ^(.*)$ /some/subdir/projects/$1 [L] 
+5

Có vẻ như chuyển hướng này, chứ không phải viết lại – zoltar

6

Hãy thử quy tắc này trong tập tin cấu hình .htaccess trong thư mục gốc tài liệu của máy chủ của bạn:

RewriteEngine on 
RewriteRule !^some/subdir/projects(/|$) some/subdir/projects%{REQUEST_URI} [L] 

Như bạn muốn sử dụng quy tắc này trong thư mục /some/subdir/ của bạn, thay đổi quy tắc như sau:

RewriteRule !^projects(/|$) projects%{REQUEST_URI} [L] 

Và nếu bạn muốn chuyển hướng bất kỳ yêu cầu của /some/subdir/projects/foobar-0.123.foobar, đưa quy định này trên trước đề cập:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /some/subdir/projects[/?\s] 
RewriteRule ^some/subdir/projects/?([^/].+)?$ /some/subdir/$1 [L,R=301] 
+0

Làm thế nào tôi có thể làm điều này với một tập tin .htaccess bên trong "/ some/subdir" vì tôi không có quyền ghi vào thư mục gốc của máy chủ web ? – Wilco

+0

Xóa 'some/subdir /' khỏi cả mẫu và thay thế. Phần còn lại sẽ ổn thôi. – Gumbo

1

Tôi sẽ sử dụng này:

RewriteEngine On 
RewriteRule ^(/some/subdir)/(.*)$ $1/projects/$2 

này sẽ chuyển hướng /some/subdir/<anything> để /some/subdir/projects/<anything>.

Lưu ý rằng hàng đầu / thực sự bắt buộc phải khớp với phần đầu của URL, trừ khi bạn có RewriteBase / đặt ở đâu đó.

+0

Dấu gạch chéo hàng đầu chỉ bắt buộc khi được sử dụng trong cấu hình máy chủ hoặc máy chủ ảo. Trong tệp cấu hình .htaccess, tiền tố cho mỗi thư mục nếu bị xóa trước khi được kiểm tra và sau đó được nối thêm vào trạm biến đổi. – Gumbo

+0

Tôi đã có đau đầu lớn với/thiếu từ thư mục con, - không có nhiều thông tin xung quanh về vấn đề này, nhưng nếu bạn chỉ muốn chuyển hướng đến thư mục con người thực sự đến từ, làm như sau - RewriteRule /? ([^ /]. +)? $ http://examplen.com/$1 [R = 301, L] – GAV

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