繁体   English   中英

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

[英]Using URL Rewrite to remove folder from url redirect

考虑如下结构:

/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中的folderxfolderyfolderz等没有硬编码匹配

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

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中删除目录...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM