2

こんにちは、私はウェブサイトを作成していますが、ユーザーが送信中の記事のタイトルとしてアンペアまたはスラッシュを追加すると、htaccess クリーン URL リダイレクトに問題があります。英数字、-、_ などの特定の文字のみを許可することにしました。 、@、[、]。引用符や二重引用符などはありません...

私は正規表現の経験があまりなく、文字列置換を使用する代わりに、質問する必要があると思いました。

また、この件に関する他の提案も大歓迎です

私のhtaccessには、次の設定があります。

RewriteRule ^([^/]*)(.*)$ /index.php?page=$1&request=$2

そして私のインデックスには次のものがあります:

include 'db.php';
include 'generic.php';

$pages = array('','main','events','news','rss','search','add-event');

if(isset($_GET['page']) && in_array($_GET['page'], $pages))
{
    $event_category = null;
    $event_title = null;
    $search_string = null;
    $rss_category = null;
    $events_date = null;
    $search_page = null;

    validate_evented_page(trim(urldecode($_GET['page'])));
}
else
{
    evented_error_page(404);
}

function evented_error_page($err)
{
    include('errorpages/error.php');
}

function validate_evented_page($p)
{
    $page = strtolower($p);

    global $event_category;
    global $event_title;
    global $search_string;
    global $rss_category;
    global $events_date;
    global $search_page;

    if($page == 'main' || strlen($p) == 0)
    {   
        include 'main.php';
    }
    else if($page == 'events')
    {
        $params = explode_url($_GET['request']);

        if(count($params) == 0)
        {
            $events_date = "'';";
            include 'allevents.php';
        }
        else if(count($params) == 1)
        {   

            if(check_date($params[0]))
            {
                $date_split = explode('-',$params[0]);
                $events_date = "'".date("m/d/Y" , mktime(0, 0, 0, date('m'), $date_split[1], date('Y')))."';";
            }
            else
            {
                $events_date = "'';";
            }

            include 'allevents.php';
        }
        else if(count($params) == 2)
        {
            $event_category = trim(urldecode($params[0]));
            $event_title = trim(urldecode($params[1]));

            include 'event.php';
        }
        else
        {
            evented_error_page(404);
        }

    }
}

次の URL:

/events/Drum+%26+Bass/Innersense+presents+ETHOS_v04-0

$_GET['request'] = /Drum を与える

ドラム&ベースであるべきだったとき(データベースでは、このカテゴリを「ドラム&ベース」として保存しました)。

4

1 に答える 1

0

フラグ&を使用して backreferene でグループ化されるものをエンコードするように mod_rewrite に指示する必要があります。B

RewriteRule ^([^/]*)(.*)$ /index.php?page=$1&request=$2 [B,L]

URI は、書き換えエンジンを介して送信されるときにデコードされます。したがって、%26は にデコードされ&Bフラグはそれが後方参照として再エンコードされることを保証します。

于 2012-12-14T13:01:27.173 に答える