2012-11-07 27 views
7

Tình hìnhmod_rewrite chọn một thư mục cho các tên miền

Tôi đang sử dụng framework Zend, và do đó cố gắng gọi cho thư mục theo địa chỉ kết thúc bằng một thất bại và chúng tôi nhận được lỗi: 'điều khiển không hợp lệ theo quy định. Tôi cần phải nối thêm diễn đàn vào ứng dụng trong một thư mục riêng biệt. Tôi thay đổi tập tin .htaccess như sau:

RewriteRule ^forum(.*)$ forum$1 [L] 

và trong một thời gian nó là tốt, cho đến khi tôi nhận ra thực tế rằng trang tồn tại trong hai phiên bản trong hai lĩnh vực (php nhận miền [.pl/.co.uk ] và chọn ngôn ngữ). Vì vậy, tôi quyết định tách các diễn đàn thành hai mô-đun riêng biệt (ví dụ: thư mục cho diễn đàn phiên bản Ba Lan sẽ là: forum_pl và Vương quốc Anh sẽ là: forum_uk - hai diễn đàn khác nhau)

Sự cố là gì?

Nó cần phải viết lại tập tin .htaccess để làm việc như thế này:

NẾU: www.domena.pl/forum

THEN: mở cửa cho các kịch bản từ thư mục/forum_pl

NẾU: www.domain.co.uk/forum

THEN: mở tập lệnh từ thư mục/forum_uk. Điều quan trọng nhất là khi tôi cố gắng sửa chữa .htaccess tập tin thêm RewriteCond sau đó chuyển hướng đầu tiên không còn hoạt động chính xác, ngay cả sau khi trở về phiên bản gốc (được hiển thị ở trên).

Hãy giúp tôi và xin lỗi nếu tôi không tìm thấy câu trả lời đã được đưa ra trước đó.

EDIT:

làm việc đầu tiên giải pháp

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L] 
RewriteRule ^forum_uk(.*)$ forum_uk$1 [L] 
RewriteCond %{HTTP_HOST} ^www.domena.pl(.*) [NC] 
RewriteRule ^forum(.*)$ forum_pl$1 [L] 
RewriteCond %{HTTP_HOST} ^www.domain.co.uk(.*) [NC] 
RewriteRule ^forum(.*)$ forum_uk$1 [L] 

Nó trông giống như nó muốn làm việc nhưng, vấn đề cần giải pháp là (TODO):

  1. Khi bạn loại: www.domain.pl/forum nó sẽ đưa bạn đến www.domain.pl/forum_pl/ nhưng nếu bạn gõ: www.domain.pl/forum/ nó sẽ đưa bạn đến www.do main.pl/forum/ (đọc từ forum_pl). Làm thế nào để làm cho nó hoạt động trong tình huống đầu tiên giống nhau, như trong thứ hai.

EDIT:

giải pháp cuối cùng của tôi:

#FORUM 
#PL 
RewriteCond %{REQUEST_URI} ^/forum$ [NC] 
RewriteRule ^(.*)$ forum/ [R=301,L] 

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L] 

RewriteCond %{REQUEST_URI} ^/forum_pl(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.domena.pl/forum/ [R=301,L] #Dosen't work properly (?) 

RewriteCond %{HTTP_HOST} ^www.domena.pl(.*) [NC] 
RewriteCond %{REQUEST_URI} ^/forum(/?)$ [NC] 
RewriteRule ^forum[^/](.*)$ forum_pl/$1 #Dosen't work properly, but without it crash! 
RewriteRule ^forum(.*)$ forum_pl$1 [L] 
#UK 
RewriteCond %{REQUEST_URI} ^/forum_uk(.*)$ [NC] 
RewriteRule ^(.*)$ http://www.domain.co.uk/forum/ [R=301,L] #Dosen't work properly (?) 

RewriteCond %{HTTP_HOST} ^www.domain.co.uk(.*) [NC] 
RewriteCond %{REQUEST_URI} ^/forum(/?)$ [NC] 
RewriteRule ^forum[^/](.*)$ forum_uk/$1 #Dosen't work properly, but without it crash! 
RewriteRule ^forum(.*)$ forum_uk$1 [L] 

cuối cùng, phiên bản làm việc:

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L] 
RewriteRule ^forum_uk(.*)$ forum_uk$1 [L] 

RewriteRule ^forum_pl(.*)$ http://www.domena.pl/forum$1 [R=301,L] # Not working! 
RewriteRule ^forum_uk(.*)$ http://www.domain.co.uk/forum$1 [R=301,L] # Not working! 

# Normalize URL first: 
RewriteRule ^forum$ forum/ [R=301,L] 

# redirect to polish version of web under forum_pl if on .pl TLD and 
# request is made to /forum/ (already normalized) 
RewriteCond %{HTTP_HOST} =www.domena.pl [NC] 
RewriteRule ^forum(.*)$ forum_pl$1 [L] 

# redirect to english version of web under forum_en in on .uk TLD and 
# request is made to /forum/ 
RewriteCond %{HTTP_HOST} =www.domain.co.uk [NC] 
RewriteRule ^forum(.*)$ forum_uk$1 [L] 

Đó là một điều đáng tiếc rằng bạn có thể gọi từ trán của bạn ser forum_uk và forum_pl thư mục bằng tay.

Trả lời

1

Không chắc nếu tôi định hướng đúng trong câu hỏi dài của bạn với một số tiến triển :-) Hãy thử điều này:

# Normalize URL first: 
RewriteRule ^forum$ forum/ [R=301,L] 

# redirect to polish version of web under forum_pl if on .pl TLD and 
# request is made to /forum/ (already normalized) 
RewriteCond %{HTTP_HOST} =www.domena.pl [NC] 
RewriteRule ^forum/(.*)$ http://www.domena.pl/forum_pl/$1 [R=301,L] 

# redirect to english version of web under forum_en in on .uk TLD and 
# request is made to /forum/ 
RewriteCond %{HTTP_HOST} =www.domain.co.uk [NC] 
RewriteRule ^forum/(.*)$ http://www.domain.co.uk/forum_uk/$1 [R=301,L] 

Nếu bạn cần rewites hành động khác nhau, cho tôi biết

+0

Cảm ơn cho câu trả lời ! Nhưng cuối cùng nó không chính xác những gì tôi đang tìm kiếm. Bây giờ, nó hoạt động như sau: www.domena.pl/forum mở www.domena.pl/forum_pl/ www.domain.co.uk/forum mở www.domain.co.uk/forum_uk/ Tôi không ' t muốn _pl và _uk trong url :) – MrTomAsh

+0

@ user1532418 để bạn muốn lấy tập lệnh từ thư mục forum_pl và forum_uk tương ứng nhưng bạn muốn giữ/forum/trong thanh địa chỉ trình duyệt? Nếu vậy, bạn cần phải loại bỏ 'R = 301' - nó chuyển hướng, vì vậy thanh địa chỉ trong trình duyệt phản ánh sự thay đổi –

+0

Bằng cách nào đó nó bắt đầu hoạt động! Cảm ơn! – MrTomAsh

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