2012-10-21 80 views
9

我已经搜索了这个问题,但我只会遇到真正具体的答案,似乎很难适应我的具体需求。.htaccess重写查询字符串为路径

比方说,我试图重写URL是这样的:

http://www.example.org/test.php?whatever=something 

我想重写它,使它看起来就象这样:

http://www.example.org/test/something 

我怎样才能做到这一点?

+2

下面是一些例子:https://wiki.apache.org/httpd/RewriteQueryString –

回答

19

为了航线像/test/something的请求在内部重写,这样在/test.php?whatever=something内容被提供服务,你会使用htaccess的文件,这些规则在您的文档根目录:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?test/(.*?)/?$ /test.php?whatever=$1 [L] 

而且为了重定向查询字符串URL到更好看的一个:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.php\?whatever=([^\&\ ]+) 
RewriteRule ^/?test\.php$ /test/%1? [L,R=301] 
+0

绝对完美的,谢谢! – UserIsCorrupt

+0

如果通过使用上面的代码,如果某人在尾部查询字符串中有问题,那么他们只需要在最后一条规则末尾添加尾部问号,这里是一个更新代码 'RewriteCond%{THE_REQUEST}^[AZ] {3, 9} \ /test\.php\?whatever =([^ \&\] +) RewriteRule^/?test \ .php $/test /%1? [L,R = 301]' –

+0

我使用相同的规则,但它不工作我的网址是http://example.com/directory1/directory2/login.php?id=8,我想使它像http: //example.com/directory1/directory2/login/8请告诉我如何解决它 –