【问题标题】:HTAccess Rewrite based upon a Parameter Value, ignore other ParametersHTAccess 根据一个参数值重写,忽略其他参数
【发布时间】:2013-11-07 10:43:26
【问题描述】:

另一个 HTAccess 重写问题,抱歉....

我正在尝试重写所有具有 menuid=28421、menuid=27384 和 menuid=73841 的 URL。问题是 menuid 是较长查询字符串的一部分,但并非所有参数都存在于查询字符串中。我想只根据menuid的值改写,其他参数忽略。

http://www.domain.com/shop.php?menuid=28421&menuref=Ja&menutitle=New+Products&limit=5&page=8
http://www.domain.com/shop.php?menuid=27384&menuref=Ic&menutitle=Old+Products&page=3
http://www.domain.com/shop.php?menuid=73841&menuref=Hd&limit=10&page=14

重定向结果:

http://www.domain.com/new.html
http://www.domain.com/old.html
http://www.domain.com/sale.html

在下面尝试过,但没有骰子:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^menuid=28421$ [NC]
RewriteRule ^shop\.php$ http://www.domain.com/new.html? [R=301,NE,NC,L]

我会根据我的产品类别的 menuid 自动生成网页:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^menuid=28421&page=1$ [NC]
RewriteRule ^shop\.php$ http://www.domain.com/new.html? [R=301,NE,NC,L]

@anubhava 建议添加:

## 301 Redirects of Individual Menus, Ignoring the Limit Parameter etc...
RewriteEngine On
RewriteCond %{QUERY_STRING} (?:^|&)menuid=(?:28421|12356)(?:&|$) [NC]
RewriteRule ^shop\.php$ http://www.domain.com/new.html? [R=301,NE,NC,L]

感谢您的建议,

标记。

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案1】:

    在这种情况下,您需要使用更好的正则表达式来匹配 QUERY_STRING。

    使用这条规则:

    RewriteEngine On
    
    RewriteCond %{QUERY_STRING} (?:^|&)(menuid=[^&]+).+ [NC]
    RewriteRule ^shop\.php$ %{REQUEST_URI}?%1 [R=302,NE,NC,L]
    

    menuidid=28421 可以出现在 QUERY_STRING 中的任何位置。

    【讨论】:

    • 嗨@anubhava,我试过这个但得到一个500内部服务器错误。我将有一个剧本来尝试找出原因。非常感谢您的快速回复,马克。附言“|73841)(?:&|$”应该是“|73841)(?:&|$)”吗?如果是这样,我现在得到“页面未正确重定向”。
    • 我想一定是因为我用menuid动态生成new.html,old.html sale.html。我可以将 menuid 参数传递给重写的 shop\.php$ 部分,以便 PHP 可以根据 menuid 生成输出文件吗?谢谢。
    • 抱歉,我的代码中有错字。刚刚编辑了,你现在可以试试吗?
    • 我修复了丢失的括号,它指出“页面没有正确重定向”,我认为这是因为 RewriteRule ^shop\.php$ 需要附加到它的 menuid 以便new.html 文件可以由 PHP 动态生成。再次感谢您。
    • ? 最后将删除任何查询字符串,因此 "The page isn't redirecting properly" 不应该出现。您可以通过编辑您的问题来发布您完整和最新的 .htaccess。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多