1

考虑如下结构:

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

当前浏览器显示/显示以下 URL »

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

我们如何重定向在浏览器地址栏中显示/显示以下 URL ?»

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

健康)状况:

  • URL 匹配中没有硬编码folderx, foldery,folderz

几天来试图得到这个,但无法达到满足上述要求的工作规则集。
任何人都可以帮忙吗?

4

2 回答 2

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:/]

第一条规则会将请求重定向domain/directory/file.aspx到原始请求中的路径信息domain/file设置 cookie 。 dir

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

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

于 2012-11-25T14:46:19.180 回答
0

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

它可以尝试每一个,因此它不必知道哪些文件夹与哪些 aspx 文件匹配,但它必须知道哪些文件夹是可能的。如果您知道哪些文件夹是可能的(例如,“folderx”、“folder”和“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 扩展名的文件,请重写它”。

于 2012-11-25T14:44:31.533 回答