Php 使用Mod_Rewrite删除GET查询

Php 使用Mod_Rewrite删除GET查询,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我试图让page.php?title=foo更改为/page/foo。我已经让page.php运行到了/page/,但是当我执行page.php?title=foo时,它会将url重写为/page/title?title=foo 我想删除最后一个url的?title=foo部分。有什么想法吗 我对这一点还不熟悉-我试着遵循教程,但不确定[或]和[NC](等)是什么意思 您可以这样做: RewriteEngine on RewriteRule page.php - [L] RewriteRule

我试图让
page.php?title=foo
更改为
/page/foo
。我已经让page.php运行到了/page/,但是当我执行
page.php?title=foo
时,它会将url重写为
/page/title?title=foo

我想删除最后一个url的
?title=foo
部分。有什么想法吗

我对这一点还不熟悉-我试着遵循教程,但不确定
[或]
[NC]
(等)是什么意思


您可以这样做:

RewriteEngine on
RewriteRule page.php - [L]
RewriteRule ^page/(.*)$ page.php/?title=$1 // $1 - content of ()

所以,当用户询问
http://example.com/page/foo
,Apache将打开他
http://example.com/page.php/?title=foo
。但是地址栏仍然使用
http://example.com/page/foo

对于我的所有开发人员,我将所有请求转发到
index.php
,我排除所有css、js、jp(e)g、pdf、zip等

.htaccess

DirectoryIndex  index.php
#ErrorDocument 404 /index.php?page=404
RewriteEngine on
RewriteCond %{REQUEST_URI}  !\.(.+)$
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]
RewriteCond %{REQUEST_URI}  !\.(ico|docx|php|png|css|jpe?g|js|pdf|txt|mp3)$
RewriteRule ^(.*)$      index.php
然后在PHP启动代码中

设置变量以提供内容并在以后使用
$\u GET
如果您需要。。。。 例如:

<?php
function rewrite(){
$link = $_SERVER['REQUEST_URI'];    
    $params = array("base_url", "locale", "page", "action", "par1", "par2", "par3", "par4");
    $extraParams = preg_match("/\?/i", $link, $extraParamsMatches);
    if($extraParams){
        $link =  explode("?", $link);
        $link = $link[0];
    }
    $link = explode("/", $link);
    $i = 0;
    $vals = array();
    foreach($link as  $key => $value){
        if($params[$key] == "base_url") $value = $_SERVER['SERVER_NAME'];
        //if(empty($value)) continue ;
        $vals[$params[$key]] = $value;
        if($i == sizeof($params)-1){        
            break;
        }
    $i++;
    }
    return $vals;
}
}    
?>

重要 您可以编辑此代码以提高安全性,例如在函数中使用数据之前对其进行清理;-)
如果请求的页面在物理上或在php或数据库的数组中找不到,您可以发送
标题('Location:',true,404)并给出您的404页面

这会产生与问题相同的结果;除了能够自己处理
page.php
(即不带参数)Hi;我正在寻找相反的重写方法,即将ie
/page.php?title=foo
改写为
/page/foo
@Sam您希望用户类型/page.php?title=foo改写为地址栏吗?对不起,这对我来说很奇怪。在我的解决方案中,用户输入/page/foo到地址栏并获得所需的页面(/page.php?title=foo)哇;很抱歉这就是我想要的。我正往另一个方向走。知道如何让浏览器继续显示/page.php吗?title=foo,同时让浏览器中的URL读取/page/foo
<?php
function rewrite(){
$link = $_SERVER['REQUEST_URI'];    
    $params = array("base_url", "locale", "page", "action", "par1", "par2", "par3", "par4");
    $extraParams = preg_match("/\?/i", $link, $extraParamsMatches);
    if($extraParams){
        $link =  explode("?", $link);
        $link = $link[0];
    }
    $link = explode("/", $link);
    $i = 0;
    $vals = array();
    foreach($link as  $key => $value){
        if($params[$key] == "base_url") $value = $_SERVER['SERVER_NAME'];
        //if(empty($value)) continue ;
        $vals[$params[$key]] = $value;
        if($i == sizeof($params)-1){        
            break;
        }
    $i++;
    }
    return $vals;
}
}    
?>