尝试高级htaccess重写技巧,遇到困难

时间:2009-09-25 15:59:37

标签: url .htaccess mod-rewrite variables

嘿伙计们,这是我正在尝试的事情:

我想这样做,所以我可以将所有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工作,所以这是一个常量。

有没有办法做到这一点?我无法通过谷歌找到任何东西,显然我无法自己解决这个问题!

谢谢你们: - )

3 个答案:

答案 0 :(得分:0)

这几乎是从我的主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

答案 1 :(得分:0)

尝试此规则:

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

除了index.phpindex.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]

答案 2 :(得分:0)

Gumbo,我真的很喜欢这个解决方案,它运作得很好:

  

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

我觉得我需要在那里贴上类似的东西!(js | css)以排除那些文件夹,但我无法弄清楚在哪里,我尝试了几个地方无济于事。你有调整吗?再次感谢杀手解决方案!

编辑:我想出来了,或者发现它! 我把它放在重写规则之前:

  

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

     

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

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

  

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

     

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

     

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

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

  

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

实际创建

  

$ var1 = array(“val1”,“val2”);