[英]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
条件:
folderx
, foldery
, folderz
等没有硬编码匹配 现在已经尝试了好几天,但无法得出满足上述要求的有效工作规则。
有人可以帮忙吗?
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.