Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess问题:从URL查询中删除1(!)参数_Apache_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

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

Apache htaccess问题:从URL查询中删除1(!)参数,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我的URL看起来像 page.html?L=0&a=1&b=2&c=6或 page.html?a=1&b=2&L=0&c=6或 html?a=1&b=2&c=6&L=0 我需要删除L=0,其中L可以是0或1。但我需要保留所有其他参数。如何做到这一点?试试这个规则: RewriteCond %{QUERY_STRING} ^(([^&]*&+)*)L=[01](&+(.*))?$ RewriteRule ^page\.html$ %{REQUEST_URI}?%1%4 [L

我的URL看起来像

page.html?L=0&a=1&b=2&c=6或 page.html?a=1&b=2&L=0&c=6或 html?a=1&b=2&c=6&L=0 我需要删除L=0,其中L可以是0或1。但我需要保留所有其他参数。如何做到这一点?

试试这个规则:

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

好的,我经常在网上玩

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

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参数位于一个单独的参数字符串的末尾,则将其切断 -切断L参数,如果它是唯一的参数,则断开“?”


你能再给我一些提示吗?

好了,又是一个头疼的问题,我终于到了。我只是把这个贴在这里以防万一

  • 错过了什么
  • 也许这可以帮助其他处于类似情况的人
.htaccess规则 解释 该规则试图涵盖以下所有情况

  • 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
据我所知,正则表达式的工作原理如下:

  • (.*)检查以下L参数选项之前是否有任何内容
  • 第二个()-pair组包含3个关于L参数如何出现在查询字符串中的备选方案/案例
  • 第三个(.*)简单地涵盖了L参数后面的所有内容
  • 因此,替换只需要
    %{REQUEST_URI}?%1%3
    。这将切断具有不同L参数选项的第二个()

    最终结果 URL查询字符串将从L参数中删除,但保留所有其他内容

    有什么评论吗?如果这对你也有价值,请随意投票


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

    “page.html”可以是任何东西。。。我可以把(.*)放进去吗?我在很多例子中都把它看作是终极通配符……你可以使用。*通配符,但我怀疑当你说它可以包含“任何东西”时,你并不是真正的意思。你越具体越好。[a-zA-Z0-9-]+将相当普遍,或者可能[^./]+Hm。。。我有点不习惯使用那个代码,因为我不完全理解它。你能解释一下吗,这样我也能学到一些东西?@Czar:
    (([^&]*&+*)
    将匹配
    L=0
    L=1
    的键/值对前面的任何键和值对(因为
    L=[01]
    )<代码>(&+(.*)?将匹配任何以至少一个
    &
    开头的内容。这是为了只获取整个
    L
    值,而不仅仅是值stat,只需从
    0
    1
    开始即可。因此,如果
    RewriteRule
    中的模式与当前URI路径匹配,而没有上下文前缀,
    RewriteCond
    中的模式与URI查询匹配,
    %1
    (RewriteCond中第一组的匹配)包含前面的所有内容,
    %3
    (RewriteCond中第三组的匹配)
    L
    参数后的所有内容。嗯。。。好啊2件事:1。我刚检查过,“L”参数几乎可以是任何东西,从数字到字符再到任意组合。2.代码显示为%1%4。根据你的解释,这不应该是%1%3吗?
    # 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]