htaccess问题:从URL查询中删除1(!)参数

时间:2010-08-10 21:26:06

标签: apache .htaccess mod-rewrite redirect

我的网址看起来像

page.html?L = 0& a = 1& b = 2& c = 6 OR page.html?a = 1& b = 2& L = 0& c = 6 OR ?page.html中一个= 1和b = 2和C = 6&安培; L = 0 我需要删除L = 0,其中L可以是0或1.但我需要保留所有其他参数。怎么办呢?

3 个答案:

答案 0 :(得分:0)

尝试此规则:

RewriteCond %{QUERY_STRING} ^(([^&]*&+)*)L=[01](&+(.*))?$
RewriteRule ^page\.html$ %{REQUEST_URI}?%1%4 [L,R=301]

答案 1 :(得分:0)

好的,我在http://gskinner.com/RegExr/上玩了很多。

我根本无法找到适用于所有这些情况的正则表达式:

domain.com/login.html?p1=1&p2=2&L=0&P3=3 domain.com/login.html?p1=1&p2=2&L=1&P3=3 domain.com/login.html?p1=1&p2=2&L=0 domain.com/login.html?&L=0 domain.com/login.html?L=0 domain.com/login.html?L=0&p1=1&p2=2&P3=3

最后的最佳猜测是(。)(L = [a-zA-Z0-9]&?)(&?)(。)>>> $ 1 $ 3 $ 4

这导致了

domain.com/login.html?p1=1&p2=2&P3=3 domain.com/login.html?p1=1&p2=2&P3=3 domain.com/login.html?p1=1&p2=2& domain.com/login.html?& domain.com/login.html? domain.com/login.html?p1=1&p2=2&P3=3

我尝试的是: - 如果它在中间,则剪下L参数 - 如果L param位于一个孤独的param字符串的末尾,则将其剪掉 - 切断L param和“?”如果它是唯一的参数

你能提供更多提示吗?

答案 2 :(得分:0)

好的,另一个头痛,我终于到了。我只是发布这个以防万一

  • 错过了什么
  • 也许这可以帮助处于类似情况的其他人

.htaccess rule

# Rewrite Typo3 links with multilanguage Param "L"
RewriteCond %{QUERY_STRING} (.*)(^L=[a-zA-Z0-9]+&?|^&L=[a-zA-Z0-9]+&|&L=[a-zA-Z0-9]+)(&?.*)
RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]

说明

该规则试图涵盖以下所有案例

  • domain.com/login.html?p1=1&p2=2&L=abc&P3=3
  • domain.com/login.html?p1=1&p2=2&L=def
  • domain.com/login.html?&L=eh1
  • domain.com/login.html?&L=asdfasd&p1=1&p2=2
  • domain.com/login.html?L=0
  • domain.com/login.html?L=1&p1=1&p2=2&P3=3

据我所知,正则表达式如下:

  1. (。*)检查以下L-param选项之前是否有任何内容
  2. 第二个() -pair组包含3个关于L-param如何出现在查询字符串中的替代/案例
  3. 第三个(。*)只涵盖了可能跟随L-param的内容
  4. 因此,替换只需要%{REQUEST_URI}?%1%3。这将删除具有不同L-param选项的第二个()组。

    最终结果

    URL查询字符串将被剥离L-param,但保留其他所有内容。

    有何评论?如果这对你有价值,请随意投票。

    感谢所有帮助我找到正确解决方案的人!