apache用于排除某些事情的问题

时间:2015-12-03 02:56:30

标签: regex apache .htaccess mod-rewrite

我正在研究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

我想得到它,以便第二次不匹配。

1 个答案:

答案 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

匹配