簡體   English   中英

使用Mod_Rewrite刪除GET查詢

[英]Using Mod_Rewrite to remove the GET query

我試圖讓page.php?title=foo更改為/page/foo 我已經將它工作到了page.php轉到/ page /的地步,但是當我執行page.php?title=foo它將URL重寫為/page/title?title=foo

我想刪除最后一個URL的?title=foo部分。 有任何想法嗎?

我是新手-我嘗試按照教程進行操作,但不確定[OR][NC] (等)的含義。

RewriteEngine on
RewriteCond %{QUERY_STRING}     ^$              [OR]
RewriteCond %{QUERY_STRING}     ^title=(.*)$    [NC]
RewriteRule ^page.php$       page/%1      [NC,L,R=301] 

您可以執行以下操作:

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 但是adressbar仍帶有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啟動代碼中

設置變量以提供內容,並在以后使用$_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或數據庫中物理找到或在數組中找到請求的頁面,則可以發送header('Location : ',true, 404); 並給你的404頁面!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM