htaccess重写将所有“文件夹”转换为请求变量,几乎搞定了!

时间:2009-09-29 19:06:30

标签: regex .htaccess mod-rewrite

这就是我现在所拥有的:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)(.*)$ /$3?$1=$2 [N,QSA]

这将www.any.com / x / 20 / y / 30 变成www.any.com /index.php?x=20&y=30
(忽略现有的目录 - 非常感谢Gumbo!)

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

这个调整允许我去:www.any.com / x / y = 30 并完成相同的结果,但x没有任何价值。我喜欢这个选项,但我必须一次做两个变量,否则我找不到奇数变量的页面。所以www.any.com/x/y=20/z会给我“url / z not found!”

有关如何让它基本上将每个文件夹重写为请求变量的任何想法?谢谢,伙计们。

1 个答案:

答案 0 :(得分:2)

请尝试以下规则:

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

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


说明:

  • 第一条规则

    如果请求可以映射到现有文件或目录,则中止重写过程。

  • 第二条规则

    适用于/foo=bar/…/…?foo=bar表单的网址路径。

  • 第三条规则

    适用于/foo/bar/…/…?foo=bar表单的网址路径。

  • 第四条规则

    适用于/foo/…/…?foo表单的网址路径。