0

page.php?title=fooに変更しようとしてい/page/fooます。page.php が /page/ に移動するところまで機能していますが、page.php?title=fooそうすると、URL が に書き換えられ/page/title?title=fooます。

?title=foo最後の URL の部分を削除したいと思います。何か案は?

私はこれが初めてです - チュートリアルに従おうとしましたが、[OR]and [NC](etc) の意味がわかりません。

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

2 に答える 2

1

次のようなことができます。

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

于 2013-01-20T11:57:12.847 に答える
0

すべての開発者について、すべてのリクエストを に転送し、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 ページを送信して渡すことができます !!

于 2013-01-20T12:12:52.243 に答える