【问题标题】:.htaccess rewrite to convert directories into /key/value/key/value.htaccess 重写以将目录转换为 /key/value/key/value
【发布时间】:2012-02-06 08:14:17
【问题描述】:

我以前见过使用规则将 URL 上的目录转换为 key=value 请求查询的地方。

我不知道该怎么做,所以我可以拥有不止一对。

例如:

http://www.example.com/mykey/myvalue/mykey2/myvalue2

将映射到:

http://www.example.com?mykey=myvalue&mykey2=myvalue2

谢谢。

【问题讨论】:

    标签: .htaccess url


    【解决方案1】:

    我见过的这种模式最常见的用法是在 Zend 框架中,但我相信这是通过前端控制器实现的,即 PHP 代码。我相信,没有办法通过 mod_rewrite 匹配未知数量的匹配项。也就是说,如果你知道最多会有 3 对,你可以使用...

    RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?$1=$2 [QSA,L]
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?$1=$2&$3=$4 [QSA,L]
    RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?$1=$2&$3=$4&$5=$6 [QSA,L]
    

    ...但是如果没有已知的最大值,则无法完成。

    【讨论】:

      【解决方案2】:

      使用此 .htaccess 代码对基于 key/value 的 URI 进行基于递归的翻译:

      Options +FollowSymLinks -MultiViews
      RewriteEngine on
      
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^([^/]+)/([^/]+)(/.*)?$ $3?$1=$2 [N,QSA]
      RewriteRule ^(/[^/]+|[^/]+/|/?)$ /index.php [L,QSA]
      

      使用这些规则,http://localhost/n1/v1/n2/v2/n3/v3/n4/v4 的 URL 将在内部重定向到 http://localhost/?n4=v4&n3=v3&n2=v2&n1=v1,将由 / 分隔的每对 URL 段视为 QUERY_STRING 的名称-值对。但请记住,如果 URI 没有偶数个段,例如:http://localhost/n1/v1/n2/,那么它将被重定向到 http://localhost/?n1=v1,丢弃额外的 n2。

      【讨论】:

      • 如何做到这一点,以便在实施此规则之前需要 url 的另一部分,例如http://localhost/rewrite/n1/v1/n2/v2/
      • 使用RewriteRule ^(rewrite)/([^/]*)/([^/]*)(/.*)?$ /$1/$4?$2=$3 [L,QSA,NC]
      • 这将是我需要包含的唯一行吗?所以应该是RewriteEngine On RewriteRule ^(data)/([^/]*)/([^/]*)(/.*)?$ /datahandler.php/$1/$4?$2=$3 [L,QSA,NC] ?
      • 无法在cmets中放置代码,建议您根据您的具体要求创建一个新问题,我会尽力回答。
      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 2019-08-08
        • 2015-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多