我正在研究apache 2.4的正则表达式,我正在尝试做的工作是我有一个HTTP_HOST和REQUEST_URI,我试图像我期望的那样重写。
RewriteCond %{HTTP_HOST} ^(.+).(?:dev|staging|prod).(?:domain1|domain2).com$
RewriteCond %1##%{REQUEST_URI} (.+)##\/([^\/]+)
RewriteCond -f "/upload/%1/assets/%2/%2.html"
RewriteRule ([^\/]+) "/upload/%1/assets/$1/$1.html" [R]
我能够匹配我期望的项目。因此,如果我向subdomain.dev.domain1.com/verntest发出请求,它会成功重写,但它也会尝试重写重写的元素
因此。
/upload/subdomain/assets/verntest/verntest.html
有效
然后
它会被重写为/upload/subdomain/assets/upload/upload.html
我想得到它,以便第二次不匹配。
答案 0 :(得分:0)
确保使用正则表达式锚点来限制您的模式:
RewriteCond %{HTTP_HOST} ^(.+).(?:dev|staging|prod).(?:domain1|domain2).com$
RewriteCond %1##%{REQUEST_URI} (.+)##/([^/]+)
RewriteCond -f /upload/%1/assets/%2/%2.html
RewriteRule ^([^/]+)/?$ /upload/%1/assets/$1/$1.html [L,R]
此模式将与/verntest
匹配,但不会与/upload/subdomain/assets/verntest/verntest.html