【问题标题】:Attempting an advanced htaccess rewrite trick, having difficulties尝试高级 htaccess 重写技巧,遇到困难
【发布时间】:2023-03-18 15:17:01
【问题描述】:

大家好,这是我正在尝试的:

我想这样做,以便我可以将所有 url 变量和值转换为文件夹,所有这些都使用一个规则。我期待找到一些方法来做到这一点:

www.example.com/var1/val1/var2/val2/varN/valN

在理想的世界里,我可以改写成这样:

www.example.com/index.php?var1=val1&var2=val2&varN=valN

但我也很乐意做这样的事情:

www.example.com/index.php?path=/var1/val1/var2/val2/varN/valN

然后在 PHP 中将它们加工成数组或结构。在我的情况下,一切都通过 index.php 工作,所以这是一个常数。

有没有办法做到这一点?我无法通过谷歌找到任何东西,显然我自己也想不通!

谢谢大家 :-)

【问题讨论】:

    标签: url .htaccess mod-rewrite variables


    【解决方案1】:

    这是从我的主要 apache 配置中的 <Directory> 指令中几乎逐字复制的内容。我一直无法这样做,但也应该在.htaccess 中工作(可能没有<Directory> 部分)。

    <Directory /path/to/document/root/>
        RewriteEngine On
        RewriteRule ^(.*)$ index.php?path=$1 [QSA]
    </Directory>
    

    网址http://www.any.com/foo/bar/baz/spam/eggs 应变为http://www.any.com/index.php?path=/foo/bar/baz/spam/eggs

    【讨论】:

      【解决方案2】:

      试试这个规则:

      RewriteEngine on
      RewriteRule !^index\.php$ index.php?path=%{REQUEST_URI} [L]
      

      这会将除index.php 之外的所有请求重写为index.php

      如果您想排除现有文件和目录,请将这些 RewriteCond 指令添加到您的规则中:

      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule !^index\.php$ index.php?path=%{REQUEST_URI} [L]
      

      这是前一种格式的规则,只是参数的格式为var[]

      RewriteRule ^([^/]+)/([^/]+)(.*)$ /$3?$1[]=$2 [N,QSA]
      

      【讨论】:

        【解决方案3】:

        Gumbo,我真的很喜欢这个解决方案,效果很好:

        重写规则 ^([^/]+)/([^/]+)(.*)$ /$3?$1[]=$2 [N,QSA]

        我觉得我需要在其中粘贴 !(js|css) 之类的东西来排除这些文件夹,但我不知道在哪里,我尝试了几个地方都无济于事。你对此有什么调整吗?再次感谢您的杀手级解决方案!

        编辑:我想通了,或者说找到了! 我把它放在重写规则之前:

        RewriteCond %{REQUEST_FILENAME} !^(.+).css$

        RewriteCond %{REQUEST_FILENAME} !^(.+).js$

        最后,它看起来像这样,并且完美运行:

        RewriteCond %{REQUEST_FILENAME} !^(.+).css$

        RewriteCond %{REQUEST_FILENAME} !^(.+).js$

        重写规则 ^([^/]+)/([^/]+)(.*)$ /$3?$1[]=$2 [N,QSA]

        这个解决方案我最喜欢的方面是我可以传递 url 数组,所以:

        www.any.com/var1/val1/var1/val2/

        实际创造

        $var1= 数组("val1","val2");

        【讨论】:

          猜你喜欢
          • 2014-08-04
          • 2021-06-21
          • 1970-01-01
          • 2016-06-21
          • 2013-06-19
          • 2011-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多