2009-12-28 20 views
0

我已经在我的.htaccess文件如何创建以下.htaccess文件

的URL“xyz.in/index.php?page=home”看起来像这样在写了下面的代码浏览器的地址栏“xyz.in/page/home”

如果我想通过URL传递一个变量,那么我将不得不写作“xyz.in/page/home?value=1”或“xyz .in/page/home?value = 1 & value2 = 56 & flag = true“

url的起始部分(xyz.in/page/hom e)干净(搜索引擎友好),但如果我在URL中传递更多变量,那么它看起来不太好。

我想使这个网址像 “xyz.in/page/home/value/4/value2/56”等。

变量值和值2不是静态的,它们仅用于此处。名称可以是任何东西。

可以做到这一点吗?

请帮我形成“的.htaccess”文件

(涉及到在这个问题上使用的标题,语言或标签的任何修改都欢迎)

感谢

+0

你错了。该规则将'/ page/home'重写为'/index.php?page=home',而不是*反之。 – Gumbo 2009-12-28 10:41:18

+0

是的,你是对的..抱歉写错了。现在编辑它。 – 2009-12-28 10:55:09

回答

1

最简单的将是解析PHP的URL路径。然后,你就只需要这个规则的要求重写你的PHP文件:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule !^index\.php$ index.php [L] 

条件将确保只有不存在的文件的请求被重写。

你的PHP脚本可能不是这个样子:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
$segments = explode('/', ltrim($_SERVER['REQUEST_URI_PATH'])); 
for ($i=0, $n=count($segments); $i<$n; $i+=2) { 
    $_GET[rawurldecode($segments[$i])] = rawurldecode($segments[$i+1]); 
} 
+0

感谢您帮助Gumbo先生, 但是它如何使用呢?你能详细说明你的答案吗? – 2009-12-28 10:59:24

+0

@Gaurav Sharma:你可以像我写的那样使用代码。然后应该将'/ page/home/value/4/value2/56'的请求解析为'$ _GET = array('page'=>'home','value'=>'4','value2'= > '56' );'。 – Gumbo 2009-12-28 11:15:27

+0

您也可以使用parse_url($ _ SERVER ['REQUEST_URI'])['path']来获取路径而不使用正则表达式。 – Imran 2009-12-28 12:03:30