使用URL Rewrite从url重定向中删除文件夹

时间:2012-11-25 14:29:47

标签: regex url iis rewrite

考虑如下结构:

/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

条件:

  • 网址中folderxfolderyfolderz等的硬编码不匹配

现在试图解决这个问题,但无法达到满足上述要求的一系列规则。
任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分: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:/]

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

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

第二条规则将read cookie dir并根据原始请求的路径提供请求。这将导致通过正确的路由从URL中删除目录...

答案 1 :(得分:0)

如果没有硬编码可能的文件夹名称,这是不可能的。 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扩展名的文件,请重写它”。