我想这样做,所以我可以将所有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工作,所以这是一个常量。
有没有办法做到这一点?我无法通过谷歌找到任何东西,显然我无法自己解决这个问题!
谢谢你们: - )
答案 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.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]
答案 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”);