【问题标题】:Using URL Rewrite to remove folder from url redirect使用 URL 重写从 url 重定向中删除文件夹
【发布时间】:2012-11-25 23:57:37
【问题描述】:

考虑如下结构:

/folderx/a.aspx
/folderx/b.aspx
/foldery/c.aspx
/folderz/d.aspx

目前浏览器显示/显示以下网址 »

https://xxx.domain.yyy/folderx/a.aspx
https://xxx.domain.yyy/folderx/b.aspx
https://xxx.domain.yyy/foldery/c.aspx
https://xxx.domain.yyy/folderz/d.aspx

我们如何重定向显示/显示以下网址浏览器地址栏代替? »

https://xxx.domain.yyy/a
https://xxx.domain.yyy/b
https://xxx.domain.yyy/c
https://xxx.domain.yyy/d

条件:

  • 在 URL 匹配中没有对 folderxfolderyfolderz 等进行硬编码

现在尝试了几天,但无法得出满足上述要求的工作规则集。
有人可以帮忙吗?

【问题讨论】:

    标签: regex url iis rewrite


    【解决方案1】:
    RewriteCond %{HTTP_HOST}:%{SERVER_PORT}s ^(.*):(443(s)|\d+s)$
    RewriteRule ^/?([^/]+)/([^/]+)\.aspx$ http%3://%1/$2 [NC,R=301,QSA,L,CO=dir:$1:%1:0:/]
    

    第一条规则将 redirect 请求 domain/directory/file.aspxdomain/fileset cookie dir 与来自原始请求的路径信息。

    RewriteCond %{HTTP_COOKIE} (?:^|;\s*)dir=([^;]+)
    RewriteRule ^/?(.*)$ /%1/$1.aspx [QSA,L]
    

    第二条规则将read cookiedir 并根据原始请求的路径为请求提供服务。这将导致使用正确的路由从 url 中删除目录...

    【讨论】:

      【解决方案2】:

      如果不对可能的文件夹名称进行硬编码,这是不可能的。 mod_rewrite 如何神奇地知道哪些文件夹是可能的?它必须是硬编码的。它违反了你的条件,但这是唯一的方法。

      它可以尝试每一个,因此它不必知道哪些文件夹与哪些 aspx 文件匹配,但它必须知道哪些文件夹是可能的。如果您知道哪些文件夹是可能的(例如,“folderx”、“foldery”和“folderz”),您可以对每个可能的文件夹进行一系列重写,如下所示:

      RewriteCond /folderx%{REQUEST_FILENAME}.aspx -f
      RewriteRule ^(.+)$ /folderx/$1.aspx [L,QSA]
      
      RewriteCond /foldery%{REQUEST_FILENAME}.aspx -f
      RewriteRule ^(.+)$ /foldery/$1.aspx [L,QSA]
      
      RewriteCond /folderz%{REQUEST_FILENAME}.aspx -f
      RewriteRule ^(.+)$ /folderz/$1.aspx [L,QSA]
      

      这些规则说“如果在定义的文件夹中存在带有 aspx 扩展名的文件,则重写它”。

      【讨论】:

      • 文件夹/目录包含在原始请求中。我相信 OP 希望将此类请求重定向到 url 中没有列出文件夹/目录的 url,但要保持从原始请求正确路由到文件夹/目录。
      • @Ωmega,可能,但我没有解释为字面重定向。我将它解释为意味着第二种形式应该能够重写到第一种形式,而实际上不必先转到第一种形式并被重定向——使您的 cookie 解决方案无法真正起作用(如果他们从不访问原始 url,则永远不会设置 cookie)。但也许我解释错了。
      • @Ωmega,尽管如此,我还是给了你一个 +1 的答案,因为如果 OP 可以要求用户首先访问原始表单并重定向,那么你的解决方案将起作用。
      • 我相信OP希望将长网址更改为短网址,输入长网址。我认为他/她担心的是浏览器会在地址栏中显示/显示短网址。所以浏览器获取的实际 url 是长的……
      • @Ωmega -- 正如我所说,我的解释不同(即可以直接访问shorturl)。但我理解您的解释,并同意您的解决方案在这种情况下会奏效。
      猜你喜欢
      • 2020-09-06
      • 2023-04-03
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2014-02-19
      • 1970-01-01
      相关资源
      最近更新 更多