代码之家  ›  专栏  ›  技术社区  ›  Alex

.htaccess问题-URL重写

  •  0
  • Alex  · 技术社区  · 16 年前

    我对.htaccess中的URL重写有问题。以下是.htaccess文件:

    RewriteEngine On
    RewriteBase /community/
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteRule ^view-all-results$ forums/index.php?view=view-all-results [R=302]
    RewriteRule ^view-all-results/$ forums/index.php?view=view-all-results [R=302]
    

    我需要重写url就像“ /community/view-all-results?u=2 “to” community/forums/index.php?view=view-all-results&u=2 “。 但是根据上面的规则,我会得到 community/forums/index.php?view=view-all-results “。

    我试图把rewriterule改为

    RewriteRule ^view-all-results?(.*)$ forums/index.php?view=view-all-results&$1 [R=302]
    

    但它不能正常工作。它仍然将URL重写为“ 社区/论坛/index.php?View=查看所有结果 “。

    当我改变规则时(用+代替*):

    RewriteRule ^view-all-results?(.+)$ forums/index.php?view=view-all-results&$1 [R=302]
    

    我的网址是” community/forums/index.php?view=view-all-results&s “。所以我不理解这种行为。(

    如有任何建议,我将不胜感激。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Wrikken    16 年前

    魔法旗是 in the docs: [QSA] ,这会将原始查询字符串添加到您的URL。

    正常匹配只针对路径进行,而不是针对查询,您可以在magic变量中找到查询。 %{QUERY_STRING} )匹配此变量可以在 RewriteCond 条件。您也可以将这个变量附加到结果的URL,但是 QSA 在这里非常友好。

        2
  •  2
  •   Peter O'Callaghan    16 年前

    试试看……

    RewriteEngine On
    RewriteBase /community/
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^view-all-results/?$ forums/index.php?view=view-all-results [QSA]
    

    基本上,rewriterule的前半部分与查询字符串不匹配,因此您的第二个示例永远不会与之匹配。第一个代码丢失的主要原因是qsa标志,它告诉它传递它接收的查询字符串以及新创建的查询字符串。我还删除了r=302,因为我认为您不希望更改URL。

    编辑:哦,我还通过使尾随斜杠可选来组合规则。