0

我当然不是 .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

这肯定不是我期望它的行为方式..

4

0 回答 0