【问题标题】:Rewriting url having more than one url parameter重写具有多个 url 参数的 url
【发布时间】:2014-04-21 13:33:01
【问题描述】:

一直在研究如何使用htaccess文件重写url。经过大量时间投入,我仍然对如何重写 url 有一个非常模糊的概念。

基本上,我有一个网址:

http://mehthesheep.com/bali/jimbaran/blue-point/1

我想改写成:

http://mehthesheep.com/countries/hotel.php?hotel_id=1&state=bali&city=jimbaran

如何在 url 中包含多个参数?

任何简单解释的帮助将不胜感激!

【问题讨论】:

    标签: php apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    所以 apache 不是我最强的技能,但据我了解,您重写 url 的方式是使用 mod rewrite,并且在您的正则表达式中,每个匹配参数都可以映射到其他东西。所以像:

                     #1st field                                           #match 2 
    RewriteRule ^/hotel/(.*)/(.*)  http://www.example.com/hotel.php?hotel_id=$2&state=$1 [NC,QSA,L]
                          #2nd field                                               #match 1
    

    我的语法可能是错误的,所以我很抱歉,但要点是我可以采用模式,然后将匹配项对应到我的重写 url 中的 '$n' 键。在上面的示例中,对 /hotel/bali/1 的调用将重写为 hotel.php?hotel_id=1&state=bali。不确定它是否重要,但我使用了一个非常简单的匹配 '(.*)' 基本上意味着任何东西。

    最后一位 w/ 是您可以添加的标志,以确保获得所需的行为。 QSA 允许附加查询字符串,以防您有跟踪或其他参数进入,NC 使匹配不区分大小写,以防他们尝试 /Hotel 之类的操作。 L 是最后一个,意味着如果规则匹配,这是要评估的最后一个规则,因此执行重写(或类似的东西)。

    希望对您有所帮助。这真的帮助我深入研究了 mod rewrite: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

    【讨论】:

      【解决方案2】:

      将此代码放入您的DOCUMENT_ROOT/.htaccess 文件中:

      RewriteEngine On
      
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /countries/hotel.php?hotel_id=$4&state=$1&city=$2 [L,QSA]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        • 1970-01-01
        • 1970-01-01
        • 2016-04-25
        • 2012-04-06
        • 2020-10-24
        • 2017-02-03
        相关资源
        最近更新 更多