2017-12-06 11 views
1

だから私は.htaccessのRewriteRulesについて学ぶためにしようとしていると、次の問題に直面していますindex.phpの代わりに文字列を渡します。のhtaccessのRewriteRuleは

「/ホーム」「のindex.phpページ=家を?」開く必要があります

と私は "index.php"の中にphp $ _GET ['page']を持っていますが、毎回 "home"の代わりに "index.php"を渡します。ここで

は、ファイルが

の.htaccess

RewriteEngine On 
RewriteRule ^/?(.+)/?$ index.php?page=$1 [L] 

のindex.php PHPいる部分

<?php 

     if(isset($_GET['page'])) { 
      $path = $_GET['page'] . ".php"; 
      if (file_exists($path)) { 
       include($path); 
      } 
      else { 
       echo "File not found: " . $path; 
      } 
     } 
     else { 
      include("home.php"); 
     } 

?> 

出力は常にある:

File not found: index.php.php 

私がこの問題に直面しています両方:Webサーバーとpache。

提案がありますか?必要に応じて私の質問をより多くの情報で更新します。

+0

^この 'のRewriteRuleを試してみてください(/ |)$ /index.php?page=$1 [ QSA、L] '(サーバー上でこれをテストしていませんでしたが、私たちが持っているものと非常に似ています) – IncredibleHat

+0

あなたが知っているページがあれば、' RewriteRule ^(home | about |カタログ) (/ |)$ /$1.php [QSA、L] ' – IncredibleHat

答えて

0

あなたがルールをループを避けるために、あなたの書き換えルールから既存のファイルやディレクトリをスキップする必要があります:(。*)

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?(.+?)/?$ index.php?page=$1 [L,QSA] 
+1

これは機能します!あなたはそれを二重に固定しました。最後に "QSA"を追加するだけで動作し、RewriteConditionsを追加するときには(QSAなしで)動作します。ありがとう:) – MathewT