我当然不是.htaccess文件的专家,所以忍受我..
我有一个很好的简单规则:
RewriteCond %{DOCUMENT_ROOT}/landing-pages/$1.aspx -f
RewriteRule ^/(.[^/]*)/?$ /landing-pages/$1.aspx [NC,L,QSA]
所以如果我去一页:
http://myexampledomain.com/my-landing/page/
它被正确地重写为:
http://myexampledomain.com/landing-pages/my-landing-page.aspx
这很好,直到原始网址上有查询字符串:
http://myexampledomain.com/my-landing/page/?foo=bar
此时,不符合重写条件(我假设查询字符串是$ 1的一部分?),因此我找不到页面。
我已经尝试将我的病情改为:
RewriteCond /landing-pages/%{REQUEST_URI}.aspx -f
但是,我怀疑%{REQUEST_URI}包含前导和尾部斜杠,因此也不起作用。
有没有人对如何让条件忽略查询字符串有任何想法,但仍然在规则中追加查询字符串?
任何帮助表示感谢。
P.S。我知道路由在.net 3.5+中可用,但目前这不是一个选项,我们已经通过Helicon的asapi_rewrite模块使用了.htaccess。
由于
编辑:
我已经添加了另一个条件和规则来尝试缩小问题的位置:
RewriteCond %{QUERY_STRING} foo=bar
RewriteRule ^/(.*)/?$ /landing-pages/$1.aspx? [NC,L,QSA]
所以现在如果查询字符串foo = bar存在,则设置为具体重写。使用这个我可以看到Rewrite之后请求的URL是:
http://myexampledomain.com/landing-pages/my-landing-page/?foo=bar.aspx?foo=bar
这肯定不是我预期的表现方式..