2016-09-13 7 views
0

私は、特定のページにのみ.htmlファイルを表示する方法を見つけることでほぼ完了しました。私はtest.htmlというのhttp://www.example.com/categories/AnyPageThatExcistsInCategoriesサーバリクエストuriページと関連ページ

に示すことにする。この場合

私は、次のコードは、/カテゴリに取り組んでいます考え出しました。 <?php if ($_SERVER['REQUEST_URI'] == '/categories/') { include 'test.html';} ?>

私だけ サーバ設定がnginxのである、それはまた、/カテゴリ/ ThisCanBeAnythingのようなページに取り組んで取得する方法について黄金の先端を必要とカテゴリ/ ThisCanBeAnything/AndThisAlsoなどなど。 $_SERVER['request_uri']と上記$ REQUEST_URIの値を代入し

<?php 

$request_uri = '/categories/foo'; 

if (strpos($request_uri, '/categories/') === 0) 
{ 
    include 'your.html'; 
} 

は、リクエストURIは文字列 '/カテゴリ/' で始まる場合は、見ることができました

+0

あなたのサーバー環境はわかりませんが、Apacheを使用しており、書き換えモジュールを有効にしている場合は、そうすることができます。 – Progrock

+0

申し訳ありません。そのnginxで実行されます。 私が提供したコードは完璧に動作しますが、/ categories/AnythingElseではなく/ categoriesのみで動作します。 – razz

+0

nginxで書き換え規則を使うことができます:https://www.nginx.com/blog/creating-nginx-rewrite-rules/ – Progrock

答えて

1

ありがとうございました。前のコントローラにこのロジックがあることを前提にしています。

さらに:

<?php 

$request_uris = [ 
    '/categories/foo', 
    '/categories/', 
    '/categories', 
    '/bar' 
]; 

function is_category_path($request_uri) { 
    $match = false; 
    if (strpos($request_uri, '/categories/') === 0) 
    { 
     $match = true; 
    } 

    return $match; 
} 

foreach ($request_uris as $request_uri) { 
    printf(
     "%s does%s match a category path.\n", 
     $request_uri, 
     is_category_path($request_uri) ? '' : ' not' 
    ); 
} 

出力:使用中

/categories/foo does match a category path. 
/categories/ does match a category path. 
/categories does not match a category path. 
/bar does not match a category path. 

if(is_category_path($_SERVER['REQUEST_URI'])) { 
    include 'your.html'; 
    exit; 
} 

あなたがもしそうならあなたは、正確な文字列 '/カテゴリを/' と一致しないようにしたいこと条件を調整することができます:

if(
    strpos($request_uri, '/categories/') === 0 
    &&      $request_uri !== '/categories/' 
) {} 
+0

何らかの理由で、これはウェブサイト全体のすべてのページにHTMLを表示します。 ps。ここでは '$ request_uri = '/ categories/foo';' 'foo 'は、私が知らない何でもかまいません。 – razz

+0

あなたは、上記の固定値の代わりに '$ request_uri = $ _SERVER ['REQUEST_URI']'があると仮定します。また、インクルードの後に​​終了することもできます。 – Progrock

0

Progrockの例はうまくいきますが、好奇心が強い場合に備えて、strposの代わりに正規表現のマッチを使用する別の例があります。

<?php 
if (preg_match("/\/categories\/.*/", $_SERVER['REQUEST_URI'])) { 
    include 'test.html'; 
} 
?> 
+0

私の場合、答えは唯一の答えです。 皆さん、ありがとうございました。 – razz

+0

文字列の先頭にその正規表現パターンを固定することができます: ''/^ \/categories \ /.*/ "' – Progrock

関連する問題