2017-09-01 88 views
1

我想通过一个.htaccess文件来改写我的网址,使它们看起来更干净。我有.htaccess用参数重写网址

http://localhost:801/Test/test.php?school=19&name=Greenhaven-Elementary 

,它需要最后看起来像个

http://localhost:801/Test/test.php/19/Greenhaven-Elementary 

在我的.htaccess文件我有以下

RewriteEngine On 
RewriteRule ^([a-zA-Z0-9-/+]+)([0-9]+)$ test.php?school=/$1&name=$2/ [L] 

我曾尝试其他方法,但在使用被新.htaccess文件我一直无法弄清楚。

回答

1

这应该做你以后有什么:

RewriteEngine On 
RewriteCond %{QUERY_STRING} school=(.+)&name=(.+) [NC] 
RewriteRule ^(.*)$ http://localhost:801/Test/test.php/%1/%2? [R=301,NC,L] 

那么,是什么上面呢?

首先,它会查询school=name=为条件,如果这一条件得到满足,然后它会抢用(.+)变量的任何版本。

然后它将使用301重定向重写URL以显示http://localhost:801/Test/test.php/anything/anything2。使用%1%2将从school=/name=获取变量,然后我们使用?停止原始查询字符串出现在新重写的URL的末尾。

请确保您清除缓存之前测试此。

编辑:

我写了这对奇异查询:

RewriteEngine On 
RewriteCond %{QUERY_STRING} item=(.+) [NC] 
RewriteRule ^(.*)$ http://localhost:801/Test/%1? [R=301,NC,L] 

这包括删除test.php和我的服务器上工作没有问题,并返回http://localhost:801/Test/anything

+0

真棒!有效。非常感谢。 –

+0

这将如何转移到只有一个参数?例如我有一个额外的网址http:// localhost:801/Test/test.php?item = 82但是当我更改.htaccess RewriteEngine RewiteCond%{QUERY_STRING} item =(。+)[NC] RewriteRule ^(。*)$ http:// localhost:801/Test/test.php /%1? [R = 301,NC,L]我得到一个错误 –

+0

还有没有办法让test.php不出现在完整的网址? –