2011-11-29 29 views
5

Tôi có quy tắc viết lại, thay đổi biến máy chủ với giá trị của tên miền phụ. này hoạt động trên subdomain.mydomain.nl/somethinghere nhưng không phải trên subdomain.mydomain.nlViết lại biến máy chủ trong IIS 7.5

<rule name="Change code" enabled="true" patternSyntax="ECMAScript" stopProcessing="false"> 
    <match url=".*" ignoreCase="true" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="true"> 
     <add input="{SERVER_NAME}" pattern="(www\.)?(\w+)\.mydomain\.nl" /> 
     <add input="{SERVER_NAME}" pattern="^www.mydomain.nl.*" negate="true" /> 
     <add input="{SERVER_NAME}" pattern="^mydomain.nl.*" negate="true" /> 
    </conditions> 
    <serverVariables> 
     <set name="MYVARIABLE" value="{C:2}" /> 
    </serverVariables> 
    <action type="None" /> 
</rule> 

Tôi đã thử nghiệm 2 url: 1: subdomain.mydomain.nl/somethinghere 2: subdomain.mydomain.nl

tôi lấy biến trong PHP với đoạn mã sau:

echo $_SERVER['MYVARIABLE']; 

trong trường hợp của URL 1, sản lượng này là "tên miền phụ".

Trong trường hợp URL 2, đầu ra của điều này là "".

Kết quả của URL 1 là chính xác, nhưng đầu ra của URL 2 cũng phải là "tên miền phụ".

Tôi đã chạy một dấu vết của cả hai yêu cầu và cả hai đều cho thấy rằng quy tắc đang được khớp và được thực thi.

Có ai có thể giúp tôi không?

Trả lời

10

Khi bạn đặt biến máy chủ tùy chỉnh, bạn nên bắt đầu nó với HTTP_. Khi bạn thêm tiêu đề riêng của bạn, nó nên bắt đầu với HTTP_X_ để thêm một tiêu đề chủ bắt đầu với một X.

Thành thật mà nói, tôi thực sự không thể giải thích tại sao nó hoạt động mà không cần HTTP_ trong một số tình huống, nhưng với HTTP_ nó hoạt động trong mọi tình huống và đó cũng là cách nó được ghi lại.

<rules> 
    <rule name="Change code" enabled="true" patternSyntax="ECMAScript" stopProcessing="false"> 
     <match url=".*" ignoreCase="true" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="true"> 
      <add input="{SERVER_NAME}" pattern="(www\.)?(\w+)\.testsite\.nl" /> 
      <add input="{SERVER_NAME}" pattern="^www\.testsite\.nl$" negate="true" /> 
      <add input="{SERVER_NAME}" pattern="^testsite\.nl$" negate="true" /> 
     </conditions> 
     <serverVariables> 
      <set name="HTTP_X_MYVARIABLE" value="{C:2}" /> 
     </serverVariables> 
     <action type="None" /> 
    </rule> 
</rules> 

Bây giờ bạn có thể nhận tên miền phụ với echo $_SERVER["HTTP_X_MYVARIABLE"];.

Tôi cũng đã làm sạch các cụm từ thông dụng có điều kiện của bạn để thoát khỏi số . và cũng thêm $ để làm cho nó khớp chính xác với tên miền chính xác.

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn, đây là giải pháp. Thật kỳ lạ là tôi không thể tìm thấy tài liệu này bất kỳ lúc nào. – user1071188

+2

Để đặt tiêu đề yêu cầu, cần thêm HTTP_. Đây là tài liệu [ở đây] (http://learn.iis.net/page.aspx/665/url-rewrite-module-20-configuration-reference/#Setting_Server_Variables) (xem "Lưu ý về yêu cầu tiêu đề"). Những gì cũng câu đố tôi mặc dù là lý do tại sao thiết lập một tiêu đề yêu cầu luôn luôn hoạt động nhưng thiết lập một biến máy chủ không phải lúc nào cũng có vẻ làm việc. –

+0

Cảm ơn người đàn ông. bạn đã cứu cuộc đời tôi! –

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