我当然不是 .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
这工作正常,直到原始 URL 上有一个查询字符串:
http://myexampledomain.com/my-landing/page/?foo=bar
此时,不满足重写条件(我假设查询字符串是 $1 的一部分?),所以我得到一个找不到页面。
我尝试将我的条件更改为:
RewriteCond /landing-pages/%{REQUEST_URI}.aspx -f
但是,我怀疑 %{REQUEST_URI} 包含前导和尾随斜杠,因此这也不起作用。
有没有人对我如何获得忽略查询字符串的条件有任何想法,但仍将查询字符串附加到规则中?
任何帮助表示赞赏。
ps 我知道路由在 .net 3.5+ 中可用,但目前这不是一个选项,我们已经通过 Helicon 的 asapi_rewrite 模块使用 .htaccess。
谢谢
编辑:
此后,我添加了另一个条件和规则来尝试缩小问题所在:
RewriteCond %{QUERY_STRING} foo=bar
RewriteRule ^/(.*)/?$ /landing-pages/$1.aspx? [NC,L,QSA]
因此,如果查询字符串 foo=bar 存在,则现在将其设置为专门重写。使用它我可以看到重写后请求的 URL 是:
http://myexampledomain.com/landing-pages/my-landing-page/?foo=bar.aspx?foo=bar
这肯定不是我期望它的行为方式..