2013-06-12 28 views
6

Để thử nghiệm địa phương, tôi cần nắm bắt tất cả các yêu cầu đến www.somedomain.com/XXX (trong đó X là đường dẫn) và gửi chúng đến localhost/somevdir/XXX.Thiết lập quy tắc Ghi lại URL cho một miền cụ thể

Tôi đã thêm này để file HOSTS của tôi (c: \ windows \ system32 \ drivers \ etc):

127.0.0.1 www.mydomain.com 

Sau đó, trong IIS8 (Windows 8), tôi đã thêm một ràng buộc để tôi "Trang web mặc định" cho máy chủ lưu trữ www.mydomain.com. Điều này làm việc, bây giờ tôi có thể duyệt www.mydomain.com/test.html và xem một trang html thử nghiệm. Thư mục ảo của tôi nằm trong trang web Mặc định. Sau đó tôi thêm URL Ghi lại URL vào trang web cho bit cuối cùng:

Nhưng - điều đó không hiệu quả. Tôi nhận được một 404 vì vậy có vẻ như trận đấu không bao giờ xảy ra. Tôi đã thử chuyển hướng và viết lại, và tôi đã thử mà không có^trong regex và một vài chỉnh sửa regex khác. Ai đó có thể giải thích những gì tôi đã làm sai?

Trả lời

12

Tôi nghĩ rằng những điều sau đây nên làm việc:

<rule name="mydomain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^(mydomain\.com|www\.mydomain\.com)$" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" /> 
</rule> 

Trận đấu trên bất kỳ URL đảm bảo các điều kiện được kiểm tra, và biến máy chủ HTTP_HOST vẻ như cách đáng tin cậy nhất của việc kiểm tra tên máy yêu cầu. Bạn có thể loại bỏ điều kiện đầu vào REQUEST_FILENAME, nhưng nó hoạt động như một kiểm tra sanity khá tốt để đảm bảo các tệp tĩnh luôn được phân phối.

+0

Hầu như :) Tôi phải sử dụng chuyển hướng (viết lại không hoạt động) và phải chỉ định đường dẫn đầy đủ với máy chủ ('http: // localhost/MyVDir/{R: 1}') nhưng một khi tôi đã làm điều đó, tôi đã ở :) –

+0

Bạn có nên thoát khỏi các khoảng thời gian trong mẫu cho tên miền của mình không?^((mydomain \ .com) | (www \ .mydomain \ .com)) $ –

+0

Vị trí tốt, may mắn là bất kỳ ký tự nào khớp với các khoảng thời gian không phải là vấn đề vì hầu hết mọi người sẽ không có wwwXmydomain.com trong đó X là một lá thư ngẫu nhiên. Không cần thêm dấu ngoặc đơn. –

0

Điều này tốt hơn cho việc bắt cả hai www. và không phải www. phiên bản của tên miền (dấu ngoặc vuông có ký tự? có nghĩa là tùy chọn trong thuật ngữ regex), do đó bạn không phải viết tên miền hai lần, điều này có thể khiến lỗi có khả năng viết sai chính tả gấp hai lần.

<rule name="mydomain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^(www.)?mydomain\.com)$" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" /> 
</rule> 
Các vấn đề liên quan