Sử dụng tên miền tùy chỉnh với IIS Express


304

Theo truyền thống, tôi sử dụng các miền tùy chỉnh với máy chủ phát triển localhost của mình. Một cái gì đó dọc theo dòng:

dev.example.com
dev.api.example.com

Điều này đã cung cấp cho tôi rất nhiều tính linh hoạt khi làm việc với các API bên ngoài như Facebook. Điều này đã hoạt động rất tốt trong quá khứ với Máy chủ phát triển Visual Studio tích hợp, bởi vì tất cả những gì tôi cần làm là thêm một CNAME vào các bản ghi DNS được trỏ đến 127.0.0.1.

Tuy nhiên tôi chưa thể làm điều này hoạt động với IIS Express. Tất cả mọi thứ tôi đã cố gắng dường như đã thất bại. Tôi thậm chí đã thêm cấu hình XML chính xác vào applicationHost.configtệp cho IIS Express, nhưng dường như không nhận ra các mục nhập hợp lệ như một cài đặt thực sự của IIS.

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

Bất cứ khi nào tôi nhập dòng này và cố gắng yêu cầu http://dev.example.com:1288tôi nhận được thông báo sau:

Yêu cầu sai - Tên máy chủ không hợp lệ

Có ai biết nếu tôi đang thiếu một cái gì đó rõ ràng? Hay nhóm IIS Express thực sự thiếu tầm nhìn xa để thấy loại sử dụng này?


Đảm bảo rằng bạn có thuộc tính applicationPool của nút ứng dụng được đặt thành "Clr2IntegratedAppPool" hoặc "Clr4IntegratedAppPool". Tôi đã gặp lỗi Tên máy chủ xấu mà bạn đang gặp khi sử dụng "Clr2ClassicAppPool" hoặc "Clr4ClassicAppPool".
Neil Monroe

nhầm lẫn - bản ghi CNAME không chấp nhận địa chỉ IP nhưng các tên máy chủ khác thay thế. Ý bạn là A thu âm?
Scott Coates

1
Tôi gặp nhiều vấn đề với điều này và thấy việc sử dụng IIS thay vì IIS Express dễ dàng hơn nhiều
user0b101010

Tôi chỉ chạy vào đây là tốt. Tôi đã hy vọng nó sẽ chỉ nhìn vào số cổng và bỏ qua tên miền. Không có may mắn như vậy. Ước gì tôi có thể kích hoạt "chấp nhận tất cả" trên cổng ....
Brady Moritz

Bình chọn bây giờ! Tôi đã thêm một gợi ý UserVoice: visualstudio.uservoice.com/forums/121579-visual-studio/...
Luke Puplett

Câu trả lời:


367

Đây là những gì làm việc cho tôi (Cập nhật cho VS 2013, xem lịch sử sửa đổi cho năm 2010, cho VS 2015 xem điều này: https://stackoverflow.com/a/32744234/218971 ):

  1. Bấm chuột phải vào Dự án Ứng dụng Web ▶ PropertiesWeb, sau đó định cấu hình Serversphần như sau:
    • Chọn IIS Express ▼từ trình đơn thả xuống
    • Dự án URL: http://localhost
    • Ghi đè URL gốc của ứng dụng: http://dev.example.com
    • Nhấp vào Create Virtual Directory(nếu bạn gặp lỗi ở đây, bạn có thể cần phải tắt IIS 5/6/7/8, thay đổi IIS Default Sitethành bất cứ thứ gì trừ cổng :80, đảm bảo Skype không sử dụng cổng 80 , v.v.)
  2. Tùy chọn: Đặt Start URLthànhhttp://dev.example.com
  3. Mở %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config(Windows XP, Vista và 7) và chỉnh sửa định nghĩa trang trong <sites>khối cấu hình để tuân theo các dòng sau:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation=":80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>
    
  4. Nếu chạy MVC: đảm bảo rằng applicationPoolnó được đặt thành một trong các tùy chọn "Tích hợp" (như "Clr2IntegratedAppPool").

  5. Mở hoststệp của bạn và thêm dòng 127.0.0.1 dev.example.com.
  6. ► Start ứng dụng của bạn!

Một số lời khuyên tuyệt vời từ các ý kiến:

  • Bạn có thể cần chạy Visual Studio với tư cách Quản trị viên.
  • Nếu bạn muốn làm cho các nhà phát triển khác thấy IIS của bạn chạy netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • Nếu bạn muốn trang web giải quyết cho tất cả các máy chủ được thiết lập bindingInformation="*:80:". Sử dụng bất kỳ cổng nào bạn muốn, 80 chỉ là thuận tiện.

12
Đây chính xác là những gì tôi đã làm, chuẩn bị viết nó lên, nhưng bạn đã đánh bại tôi :-) Như một lưu ý phụ, nếu bạn muốn cho các nhà phát triển khác thấy IIS của bạn, bạn có thể muốn làm gì đó như "Netsh http add urlacl url = dev.example.com:80 user = mọi người "
EBarr

6
Ngoài ra, nếu bạn muốn trang web giải quyết cho tất cả các máy chủ lưu trữ, bạn có thể sử dụng: bindIn information = "*: 80:" Tôi sử dụng điều này để localtunnel.com hoạt động.
Lance Fisher

17
Tôi đã nhận được một lỗi truy cập bị từ chối. Chạy VS 2012 khi admin sửa nó.
xanadont

3
Phiên bản IIS Express này là gì? Tôi đang chạy VS2012 (mà tôi tin là IIS Express 8.0) và khi tôi nhấp vào nút radio "Sử dụng máy chủ IIS cục bộ" trong khu vực "Máy chủ" của trang thuộc tính Web, hãy nhấp vào hộp kiểm Sử dụng IIS Express, sau đó thử để đặt vào " mydev.example.com ", sau đó nhấn nút "Tạo thư mục ảo", tôi gặp lỗi này "Không thể tạo thư mục ảo. Không thể tạo trang web mydev.example.com". Bạn phải chỉ định "localhost" cho tên máy chủ.
Michael McCarthy

12
Điều này thật phức tạp. Người ta phải thay đổi seetings trên một số nơi khác nhau. Nó rất dễ dàng để làm cho một mớ hỗn độn thực sự. Có thực sự không có cách nào đơn giản hơn?
Anderson

151

Đối với Visual Studio 2015, các bước trong các câu trả lời trên được áp dụng nhưng applicationhost.configtệp nằm ở vị trí mới. Trong thư mục "giải pháp" của bạn đi theo đường dẫn, điều này thật khó hiểu nếu bạn đã nâng cấp và sẽ có HAI phiên bản applicationhost.configtrên máy của mình.

\.vs\config

Trong thư mục đó, bạn sẽ thấy tập tin applicationationhost.config

Ngoài ra, bạn chỉ có thể tìm kiếm thư mục giải pháp của mình cho tệp .config và tìm thấy nó theo cách đó.

Cá nhân tôi đã sử dụng cấu hình sau:

nhập mô tả hình ảnh ở đây

Với các mục sau trong tập tin máy chủ của tôi:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

Và sau đây trong tập tin applicationationhost.config của tôi:

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>

Hãy nhớ chạy phiên bản của studio trực quan 2015 với tư cách quản trị viên! Nếu bạn không muốn làm điều này mỗi lần tôi khuyên bạn nên điều này:

Cách chạy Visual Studio với tư cách Quản trị viên theo mặc định

Tôi hy vọng điều này sẽ giúp được ai đó, tôi đã gặp vấn đề khi cố gắng nâng cấp lên visual studio 2015 và nhận ra rằng không có cấu hình nào của tôi được thực hiện.


9
Phần quan trọng là thêm*:49707: ràng buộc thứ hai thay vì thay thế mặc định *:49707:localhostnhư được đề xuất trong nhiều câu trả lời khác. Và bạn phải chạy VS với tư cách quản trị viên, thực sự (sic!). Cảm ơn bạn.
fracz

3
Bạn cũng có thể sử dụng URL như http://jam.127.0.0.1.xip.io/nếu bạn không muốn sửa đổi tệp máy chủ của mình. Ngoài ra, bất kỳ cộng tác viên sẽ không cần phải sửa đổi họ. Xem xip.io .
Zack Martin

1
Tôi nghĩ rằng đáng lưu ý rằng thư mục ".vs" bị ẩn và nên được hiển thị ngay từ đầu
Thất vọng vào

3
Tôi đã xác nhận rằng điều này cũng hoạt động trong Visual Studio 2017. Thật thú vị, tôi không cần cả hai yếu tố <ràng buộc> (chỉ là yếu tố đầu tiên không có "localhost"). Tuy nhiên, Visual Studio chắc chắn không cần phải chạy với tư cách Quản trị viên, điều này gây khó chịu
Loren Paulsen

1
Tôi chỉ ước có một cách cho những người trong chúng ta không được phép điều hành bất cứ điều gì về mặt hành chính để làm điều này. Nhà tuyển dụng / khách hàng đã cấm đặc quyền quản trị viên mà không có bất kỳ suy nghĩ nào về cách họ có thể kích hoạt một cách an toàn điều này là vô cùng thiển cận.
Steve Pettifer

44

Khi sử dụng Visual Studio 2012 với IIS Express, việc thay đổi một ràng buộc hiện có không hoạt động vĩnh viễn. (Nó có thể hoạt động cho đến khi bạn đóng VS, nhưng sau đó, mọi thứ thực sự rối tung lên.)

Điều quan trọng là giữ liên kết localhost hiện có và thêm một ràng buộc mới sau nó.

Trừ khi bạn đang chạy với tư cách quản trị viên, bạn cũng cần phải chạy netsh add urlacl(để cung cấp cho mình quyền để chạy một trang web không phải localhost như một người dùng chuẩn).

Nếu bạn muốn cho phép bất kỳ tên máy chủ nào, toàn bộ quá trình như sau:

  1. Tạo ứng dụng web của bạn và tìm hiểu xem nó đang sử dụng cổng nào (xem thuộc tính dự án, tab Web, Project Url).
  2. Từ một quản trị nhanh chóng, chạy các lệnh sau (thay thế PortNumber với số cổng bạn tìm ra ở # 1):

    netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone
    

Bạn cũng có thể sử dụng tên người dùng của mình (DOMAIN \ USER) thay vì mọi người để bảo mật tốt hơn.

  1. Mở applicationationhost.config (thường trong My Documents \ IIS Express \ config) và tìm phần tử có số cổng của bạn.
  2. Thêm một ràng buộc nữa với tên máy chủ bạn muốn (trong trường hợp này, *). Ví dụ:

    <site name="MvcApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12853:localhost" />
            <binding protocol="http" bindingInformation="*:12853:*" />
        </bindings>
    </site>
    

Lưu ý rằng, nếu muốn mở tất cả tên máy chủ (*), bạn sẽ cần hai lệnh Netsh (một cho * và một cho localhost). Nếu bạn chỉ muốn mở một tên máy chủ cụ thể, bạn không cần lệnh Netsh thứ hai (localhost); chỉ cần một cái với tên máy chủ cụ thể của bạn là đủ.


Đã làm như vậy (cách tiếp cận thứ 1), khi duyệt đến mycustomhost: myportnr tôi nhận được "Dịch vụ không khả dụng". VS2012. Tôi không thể thử lần thứ 2 vì không có IIS Express trong "Tài liệu của tôi" và applicationationhost.config Tôi tìm thấy trong c: \ Tệp chương trình \ IIS Express không có cấu hình cho ứng dụng web của tôi ...
firepol

2
Với VS2013, tôi thấy rằng cấu hình này chỉ hoạt động nếu sau đó tôi chạy với tư cách quản trị viên! (Chạy với tư cách không phải quản trị viên, IIS Express dường như bỏ qua ràng buộc thứ 2 - nếu tôi mở UI của nó từ biểu tượng thông báo, IIS sẽ hiển thị trang web của tôi là đang chạy, nhưng chỉ hiển thị ràng buộc đầu tiên và tôi chỉ có thể sử dụng localhost ... Nếu Tôi đang chạy với tư cách quản trị viên, nó hiển thị cả hai ràng buộc trong UI và cả hai đều hoạt động.) Tôi đã thêm urlacls bằng Netsh, nhưng điều này dường như không có gì khác biệt - IIS Express dường như thậm chí không thử và liên kết bất cứ thứ gì ngoài localhost nếu nó không tăng.
Ian Griffiths

Thêm một bản ghi với *giải pháp "Dịch vụ không khả dụng" cho tôi.
giật

Còn kịch bản mà bạn cần sử dụng HTTPS trên cổng 443 thì sao?
Kixoka

@Kixoka Tôi đang cố chạy HTTPS. Tôi đã quản lý để làm cho nó hoạt động nhưng trình duyệt phàn nàn rằng chứng chỉ không phù hợp với tên miền. Tôi đã vượt qua điều đó nhưng tất cả các tài nguyên sau đó không tải được nên không có hình ảnh, tập lệnh hoặc CSS.
Prime By Design

24

Tên máy chủ không hợp lệ cho biết rằng trang web thực tế bạn đã định cấu hình trong tệp cấu hình IIS Express (rất có thể) không chạy. IIS Express không có mô hình quy trình như IIS.


Để trang web của bạn chạy, nó cần phải được khởi động một cách rõ ràng (bằng cách mở và truy cập từ webmatrix hoặc từ dòng lệnh gọi iothypress.exe (từ thư mục cài đặt của nó) với tham số / site.


Nói chung, các bước để cho phép tên DNS đủ điều kiện được sử dụng để truy cập cục bộ là Hãy sử dụng ví dụ của bạn về tên DNS dev.example.com

  1. chỉnh sửa% windows% \ system32 \ driver \ etc \ hosts tập tin để ánh xạ dev.example.com thành 127.0.0.1 (yêu cầu đặc quyền của quản trị viên). Nếu bạn kiểm soát máy chủ DNS (như trong trường hợp của Nick) thì mục nhập DNS là đủ vì bước này không cần thiết.
  2. Nếu bạn truy cập internet thông qua proxy, hãy đảm bảo dev.example.com sẽ không bị từ chối proxy (bạn phải đưa vào danh sách ngoại lệ trong trình duyệt của mình (đối với IE, đó sẽ là Công cụ / Tùy chọn Internet / Kết nối / Cài đặt Lan, sau đó truy cập Proxy Server / Advanced và đưa dev.example.com vào danh sách miễn trừ.
  3. Định cấu hình ràng buộc IIS Express cho trang web của bạn (ví dụ: Site1) để bao gồm dev.example.com. Đặc quyền hành chính sẽ là cần thiết để sử dụng các ràng buộc. Ngoài ra, việc đặt trước URL một lần có thể được thực hiện với http.sys bằng cách sử dụng

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. bắt đầu iisexpress /site:Site1hoặc mở Site1 trong WebMatrix


2
Xin chào Jaro, cảm ơn vì sự giúp đỡ, nhưng 127.0.0.1 được đặt trong DNS của tôi chứ không phải tệp máy chủ để tất cả các nhà phát triển có cùng quyền truy cập. Thứ hai tôi không thể bắt đầu gỡ lỗi trong VS, trừ khi ràng buộc được đặt là "*: 1234: localhost", đây là một thiết lập hoàn toàn vô dụng, bởi vì nó bị ràng buộc với tất cả các địa chỉ IP trên máy của tôi nhưng chỉ chấp nhận tiêu đề máy chủ của "localhost" ". Tại sao họ không chỉ làm "127.0.0.1:1234:" và tránh tất cả những thứ nhảm nhí này. Các tiêu đề máy chủ không cần thiết miễn là IP và cổng giải quyết. Và chạy như Admin chỉ là một nỗi đau rất lớn đối với một đội ngũ lớn. Thật là một thảm họa IIS Express.
Nick Berardi

1
Cũng như một tài liệu tham khảo Bad Request - Invalid Hostnamecó nghĩa là tên máy chủ mà tôi đang cố sử dụng không thể giải quyết được vì nhóm IIS Express theo trí tuệ vô hạn của họ đã quyết định gọi cụ thể "localhost" là tiêu đề máy chủ duy nhất sẽ hoạt động. Và VS sẽ không cho phép bạn chạy nó theo bất kỳ cách nào khác ngoài "*: 1234: localhost"
Nick Berardi

2
Tôi nghe bạn nói về vấn đề 127.0.0.1. "Localhost" trong liên kết chắc chắn là một nỗi đau vì nó không bao gồm lưu lượng truy cập cho 127.0.0.1 . Thiết kế bị giới hạn bởi hợp đồng http.sys (trình xử lý giao thức http) ngày nay chỉ nhận ra "localhost" cho việc sử dụng phi hành chính. Yêu cầu chỉ dành cho quản trị viên có thể được giảm thiểu bằng cách đặt trước URL một lần với http.sys (sẽ cập nhật thông tin ở trên). Vui lòng cho tôi biết bạn sử dụng chính xác với Visual Studio (đó là VS2010 với SP1 Beta?). Chúng ta hãy cố gắng làm việc này nhiều hơn nữa và (hy vọng) giải quyết vấn đề.
Jaro Dunajsky

lưu ý - nếu bạn thấy lỗi Netsh.exe 87 thì tham số không chính xác - có thể là do bạn đã bỏ qua đường dẫn URI (/) sau tên máy chủ của bạn.
Tim Lovell-Smith

19

Trên cài đặt WebMatrix IIS Express của tôi thay đổi từ "*:80:localhost"thành "*:80:custom.hostname"không hoạt động ("Tên máy chủ xấu", ngay cả với ánh xạ, v.v."*:80:" đã làm việc - và không ai trong số các bước bổ sung theo yêu cầu của các câu trả lời khác ở đây. Lưu ý rằng "*:80:*"sẽ không làm điều đó; để lại dấu hoa thị thứ hai.


3
uuuum, vì vậy "*:80:*"đã làm việc cho tôi, nhưng sau đó tôi khởi động lại máy tính của mình và nó đột nhiên không hoạt động cho đến khi tôi đổi nó "*:80:"và tất cả đều ổn! Cảm ơn.
CWSpear

2
Cuối cùng !! Cũng làm theo tất cả các bước ở nơi khác và xóa * ở cuối làm cho nó hoạt động, cảm ơn!
Charles Philip

Chỉ cần ở đây để nói rằng điều này làm việc cho tôi. Tôi đã thử câu trả lời được chấp nhận và hoàn nguyên tất cả các thay đổi theo những gì bạn nói và tất cả đều hoạt động tốt. Tôi đang sử dụng VS2013 Update4.
JasonWilczak

Điều này dường như làm việc hoàn hảo. Khi sử dụng VS2017, tôi không chắc chắn nên đặt gì trong Project Url để ghi nó trong tệp applicationationhost.config? Có thể thiết lập thông qua VS IDE?
Jim

8

Tôi đã cố gắng tích hợp Địa chỉ IP công cộng vào quy trình làm việc của mình và những câu trả lời này không có ích (tôi thích sử dụng IDE làm IDE). Nhưng những điều trên dẫn tôi đến giải pháp (sau khoảng 2 giờ đập đầu vào tường để có được điều này để tích hợp với Visual Studio 2012 / Windows 8) đây là những gì đã kết thúc với tôi.

applicationationhost.config được tạo bởi VisualStudio bên dướiC:\Users\usr\Documents\IISExpress\config

    <site name="MySite" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:localhost" />
            <binding protocol="http" bindingInformation="*:8082:localhost" />
            <binding protocol="http" bindingInformation="*:8083:192.168.2.102" />
        </bindings>
    </site>
  • Đặt IISExpress để chạy Administratorđể nó có thể liên kết với các địa chỉ bên ngoài (không phải máy chủ cục bộ)
  • Chạy Visual Stuio như một cách Administratorđể nó có thể bắt đầu quá trình với tư cách quản trị viên cho phép thực hiện ràng buộc.

Kết quả cuối cùng là bạn có thể duyệt đến 192.168.2.102trong trường hợp của tôi và kiểm tra (ví dụ như trong trình giả lập Android. Tôi thực sự hy vọng điều này sẽ giúp người khác vì đây chắc chắn là một quá trình khó chịu đối với tôi.

Rõ ràng đó là một tính năng bảo mật mà tôi muốn thấy bị vô hiệu hóa.


8

Giống như Jessa Flint ở trên , tôi không muốn chỉnh sửa thủ công .vs \ config \ applicationationhost.config vì tôi muốn các thay đổi được duy trì trong kiểm soát nguồn. Tôi cũng không muốn có một tệp bó riêng. Tôi đang sử dụng VS 2015 .

Thuộc tính dự án → Xây dựng sự kiện → Dòng lệnh sự kiện tiền xây dựng: Ảnh chụp màn hình thuộc tính dự án


::The following configures IIS Express to bind to any address at the specified port

::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

Chỉ cần chắc chắn rằng bạn thay đổi số cổng thành cổng mong muốn của bạn.


Một bổ sung nhỏ ở đây. Đảm bảo tạo quy tắc để mở cổng đó trong Tường lửa Windows của bạn. Sau đó, nó làm việc như một nét duyên dáng!
Peter M

Tôi thích câu trả lời của bạn vì việc chỉnh sửa .vs \ config \ applicationationhost.config không khả thi khi nhiều nhà phát triển chạy IIS Express trên máy của họ. Cảm ơn bạn!
Colin

6

Câu trả lời được bình chọn là hợp lệ .. và thông tin này đã giúp tôi khá nhiều. Tôi biết chủ đề này đã được thảo luận trước đây nhưng tôi muốn thêm một số đầu vào bổ sung. Mọi người đang nói rằng bạn phải "chỉnh sửa thủ công" tệp application.config trong thư mục Người dùng IISExpress / Config. Đây là một vấn đề lớn đối với tôi vì tôi muốn phân phối cấu hình thông qua kiểm soát Nguồn cho các nhà phát triển khác nhau.

Những gì tôi tìm thấy là bạn có thể tự động hóa việc cập nhật tệp này bằng chương trình "C: \ Program Files \ IIS Express \ appcmd.exe". Phải mất một thời gian để tìm hiểu các thông số kiểm soát nhưng Ill chia sẻ những phát hiện của tôi ở đây. Về cơ bản, bạn có thể tạo tệp .bat chạy cả lệnh NETSH và APPCMD.EXE (và có thể trao đổi tệp máy chủ nếu bạn muốn) để dễ dàng cấu hình tiêu đề máy chủ với IIS Express.

Tập tin bat cài đặt của bạn sẽ trông giống như thế này:

netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone 

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

Tôi cũng sẽ tạo một tập tin bat "Gỡ cài đặt" để dọn sạch các ràng buộc này .. (vì thường thì tôi chỉ giả mạo DNS để tôi có thể làm việc với mã nhạy cảm với tên máy chủ)

netsh http delete urlacl url=http://yourcustomdomain.com:80/

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

Tôi hy vọng thông tin này hữu ích cho ai đó .. Tôi phải mất một chút để khám phá.


4

Theo lời khuyên của Jaro, tôi đã có thể làm cho điều này hoạt động trong Windows XP và IIS Express (được cài đặt qua Web Matrix) với một sửa đổi nhỏ và không bị giới hạn chỉ với localhost. Đó chỉ là vấn đề thiết lập các ràng buộc chính xác.

  1. Sử dụng WebMatrix để tạo một trang web mới từ thư mục trong thư mục gốc của ứng dụng web của bạn.
  2. Đóng WebMatrix.
  3. Mở %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP. Vista và 7 đường dẫn sẽ tương tự nhau) và chỉnh sửa định nghĩa trang trong <sites>khối cấu hình để dọc theo các dòng sau:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation="*:80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>

Nếu chạy MVC, hãy giữ ứng dụngPool được đặt thành một trong các tùy chọn "Tích hợp".


3

Giải pháp của David là tốt. Nhưng tôi thấy <script>alert(document.domain);</script>trong trang vẫn cảnh báo "localhost" vì Project Url vẫn là localhost ngay cả khi nó đã được ghi đè bằng http://dev.example.com. Một vấn đề khác mà tôi gặp phải là nó thông báo cho tôi rằng cổng 80 đã được sử dụng ngay cả khi tôi đã vô hiệu hóa Skype bằng cách sử dụng số cổng 80 theo khuyến nghị của David Murdoch. Vì vậy, tôi đã tìm ra một giải pháp khác dễ dàng hơn nhiều:

  1. Chạy Notepad với tư cách quản trị viên và mở C: \ Windows \ System32 \ driver \ etc \ hosts, thêm 127.0.0.1 mydomain và lưu tệp;
  2. Mở dự án web bằng Visual Studio 2013 (Lưu ý: cũng phải chạy với tư cách quản trị viên), nhấp chuột phải vào dự án -> Thuộc tính -> Web, (giả sử Url dự án trong tùy chọn "IIS Express" http://localhost:33333/), sau đó thay đổi từ http://localhost:33333/đếnhttp://mydomain:333333/ Lưu ý: Sau khi thay đổi này, bạn nên không phải nhấp vào nút "Tạo Virtual Directory" ở bên phải của Dự án Url hộp cũng không nhấp vào nút Save của Visual Studio như họ sẽ không được thành công. Bạn có thể lưu cài đặt của mình sau bước 3 tiếp theo.
  3. Mở% USERPROFILE% \ My Documents \ IISExpress \ config \ applicationationhost.config, tìm kiếm "33333: localhost", sau đó cập nhật nó thành "33333: mydomain" và lưu tệp.
  4. Lưu cài đặt của bạn như được đề cập trong bước 2.
  5. Nhấp chuột phải vào một trang web trong phòng thu trực quan của bạn và nhấp vào "Xem trong Trình duyệt". Bây giờ trang sẽ được mở bên dưới http://mydomain:333333/<script>alert(document.domain);</script>trong trang sẽ cảnh báo "mydomain".

Lưu ý: Số cổng được liệt kê ở trên được giả sử là 33333. Bạn cần thay đổi nó thành số cổng được thiết lập bởi studio hình ảnh của bạn.

Đã chỉnh sửa bài đăng: Hôm nay tôi đã thử với một tên miền khác và gặp lỗi sau: Không thể khởi chạy máy chủ IIS Express Web. Không thể đăng ký URL ... Truy cập bị từ chối. (0x80070005) . Tôi thoát khỏi IIS Express bằng cách nhấp chuột phải vào biểu tượng IIS Express ở góc bên phải trong thanh tác vụ Windows, sau đó khởi động lại studio hình ảnh của tôi với tư cách quản trị viên và vấn đề không còn nữa.


1
Bây giờ, đây là câu trả lời nên được coi là giải pháp thích hợp! Hãy chắc chắn rằng bạn chỉnh sửa applicationationhost.config trong .vs / config nếu bạn đang sử dụng visual studio 2015.
Fabio Salvalai

1

Tôi đã thử tất cả các bên trên, không có gì làm việc. Điều đã giải quyết vấn đề là thêm các ràng buộc IPv6 trong tệp máy chủ. Trong bước 5 của câu trả lời @David Murdochs, hãy thêm hai dòng thay vì một, tức là:

127.0.0.1 dev.example.com
::1 dev.example.com

Tôi đã tìm ra nó bằng cách kiểm tra $ ping localhosttừ dòng lệnh, được sử dụng để trả về:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Thay vào đó, bây giờ nó trả về:

Reply from ::1: time<1ms

Tôi không biết tại sao, nhưng vì một số lý do, IIS Express bắt đầu sử dụng IPv6 thay vì IPv4.



0

Để lại đây chỉ trong trường hợp bất cứ ai cần ...

Tôi cần phải có các miền tùy chỉnh cho thiết lập Wordpress Multisite trong IIS Express nhưng không có gì hoạt động cho đến khi tôi chạy Webmatrix / Visual Studio với tư cách Quản trị viên. Sau đó, tôi đã có thể liên kết các tên miền phụ vào cùng một ứng dụng.

<bindings> 
    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>

Sau đó, truy cập http: //whthing.localhost: 12345 / sẽ chạy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.