重写规则-区分Angular#!和没有#的角!

时间:2018-12-01 19:45:01

标签: angularjs regex iis url-rewrite-module

如何在IIS中编写重写规则来处理以下情况:

文件夹结构:

[AngularApp1]
  -- app.js
  -- appController.js
  -- index.html
[AngularSecondApp]
  -- app.js
  -- appController.js
  -- index.html
[DomainSubApp]
  -- app.js
  -- appController.js
  -- index.html
favicon.ico
gulpfile.js
web.config

AngularApp1未配置 HTML5 ,并且使用 DEFAULT #!前缀。因此页面通常看起来像:https://(www.)?mywebsite.com/#!/state...

AngularSecondApp IS HTML5 模式配置,并使用 '' hashPrefix。因此页面通常看起来像:https://(www.)?mywebsite.com/state...

DomainSubApp未配置 HTML5 ,并且使用 DEFAULT #!前缀。页面通常看起来像:https://domainsubapp.mywebsite.com/#!/state...

路由

  

如果满足以下条件,则服务器应使用AngularSecondApp/index.html

     
      
  • 子域是'''www' AND ...
  •   
  • URI?是:^/\w+/?.*$-但不是文件
  •   

...

  

如果满足以下条件,则服务器应使用DomainSubApp/index.html

     
      
  • 子域为DomainSubApp
  •   

...

  

否则,服务器应使用AngularApp1/index.html,包括:

     
      
  • 子域是'''www' AND ...
  •   
  • URI?是:^/(#!/.*)?$-但不是文件
  •   

我的个人困惑

我知道您需要考虑文件。例如,http://mywebsite.com/favicon.icohttp://mywebsite.com/someFile.exthttp://mywebsite.com/scripts/scriptFile.js。所以我的一些尝试失败了,因为我的模式太通用了。因此,文件请求也被重写/重定向。

我需要做些什么来确保角度路由持久化吗?因此,如果我转到http://mywebsite.com/route/param1/param2,应该将其重写/重定向到http://mywebsite.com/AngularSecondApp/index.html route/param1/param2到哪里?

有什么

之所以说“ Had”,是因为我以前需要URL中名为AngularSecondApp的子文件夹,例如:https://(www.)?mywebsite.com/AngularSecondApp/state...。这使事情变得容易。但是黄铜人希望我摆脱URL中的那个子文件夹,因此会造成麻烦。

这就是我所拥有的:

    <clear />
    /*https forced redirect is here... irrelevant*/

    <rule name="AngularSecondApp rewrite" stopProcessing="true">
      <match url="^AngularSecondApp/.*$" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="/AngularSecondApp/index.html" />
    </rule>

    <rule name="AngularApp1 redirect">
      <conditions>
        <add input="{REQUEST_URI}" pattern="^(/AngularApp1)?/index\.html$" ignoreCase="true" />
      </conditions>
      <action type="Redirect" url="/" />
    </rule>

    <rule name="AngularApp1 rewrite">
      <conditions>
        <add input="{REQUEST_URI}" pattern="^/$" />
      </conditions>
      <action type="Rewrite" url="/AngularApp1/index.html" />
    </rule>

1 个答案:

答案 0 :(得分:0)

作为一天前的人工产物,Rewrites I“ HAD”包括一个Redirect,以防人们直接访问def importcsv(request, company): for row in dataset['company']: if(row != company): raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful") 页面。另外,我的印象是您对操作采取的任何重写操作(因此将index.html重写为/)都必须具有重定向。那是不对的。

因此,在GeorgeAWG发表评论之后,我最终放弃了重定向,只进行了重写。这简化了我的生活,甚至可能简化了每个人的生活。

index.html

因此,如果请求URI以单词字符开头,它将重写为第二个应用程序。

我不确定AngularApp1的工作方式...因为它适用于根 <rule name="AngularSecondApp rewrite"> <conditions> <add input="{REQUEST_URI}" pattern="^(/\w+)+/?$" /> </conditions> <action type="Rewrite" url="/AngularSecondApp/index.html" /> </rule> <rule name="AngularApp1 rewrite"> <conditions> <add input="{REQUEST_URI}" pattern="^/$" /> </conditions> <action type="Rewrite" url="/AngularApp1/index.html" /> </rule> ,但它也适用于/,但它不会抛出{{1}这样的文件}。因此,我的答案解决了问题,但缺少一些理解。