确保你打开了 mod_rewrite。
在文档根目录的 htaccess 文件中,添加这些(最好在您可能拥有的其他规则之上):
# Start converting query parameters to path
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/(.+?)\?[^\ ]+
RewriteCond %{QUERY_STRING} ^([^=]+)=([^&]+)&?(.*)$
RewriteRule ^([^/]+)/(.+)$ /$1/$2/%1/%2?%3 [L]
# done converting, redirect browser
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/(.+?)\?[^\ ]+
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)/(.+)$ /$1/$2 [R=301,L]
# internally rewrite paths to query strings
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)(.*) /$1/$2$5?$3=$4 [L,QSA]
# only someCompany/someEmployee left, pass it through
RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2 [L,R]
这看起来有点复杂。但是前 2 条规则检查给定请求是否针对 2 个文件夹(例如/something/somethingelse
),并带有查询字符串(之后的所有内容?
),然后匹配名称/值对并将它们构造到 URI 路径中。当查询字符串为空时,将浏览器重定向到新 URL(不带查询字符串)。这使得当有人在他们的浏览器中输入 URL 时:
http://www.site.com/someCompany/someEmployee?name=someName&age=someAge&keyN=someValueN
浏览器被重定向,因此地址栏中的 URL 如下所示:
http://www.site.com/someCompany/someEmployee/name/someName/age/someAge/keyN/someValueN/
然后第二组规则采用路径层次结构,保留前 2 个文件夹的任何内容(例如/fooCompany/barEmployee
),并将每个 2 个文件夹更改为查询字符串中的名称/值对。基本上颠倒了前两条规则的作用,但它不会重定向浏览器。它只会在内部重写 URI。