我的查询字符串mysite.com/?local=1
本地区别在1 - 600之间。
每个本地都是城市名称。如何重写网址以使其显示为mysite.com/cityname/
。我不介意为每个编写一个场景,例如if(local == 1){cityname = boston;}。
我要求甚至可能吗?所以我想将mysite.com/?local=1
转为mysite.com/boston/
。
答案 0 :(得分:0)
如果您希望在浏览器中实际更改URL,则需要重定向而不是重写。在这种情况下,您只需从数字中查找名称,并根据需要使用header("Location...");
。
答案 1 :(得分:0)
的index.php:
<?php
$map = array(
1 => 'city',
2 => 'Portland',
3 => 'Kaunas',
4 => 'Hokaido',
.....
);
if (isset($_GET['local']) && intval($_GET['local']) < 600 && intval($_GET['local']) > 0) {
header('Location: mysite.com/' . $map[intval($_GET['local'])]);
die(); // Redirect to use the pretty url
}
$path = explode('/', explode('?', $_SERVER['REQUEST_URI'])[0]); // might need to expand if php version < 5.4
$city = $path[1];
htaccess的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [PT,L]
</IfModule>
这个组合基本上做的是,如果传递带有变量'local'的GET字符串,它将执行重定向,并将城市ID转换为名称。之后,您只需获取查询字符串并随意执行任何操作