1

この質問がされた場合、またはタイトルが正しいかどうかわからない場合はお詫びしますが、htaccess ファイルを扱い始めたばかりで、少し迷っています。基本的にやりたいことは、URL の先頭に「index.php」を追加することです。たとえば、ユーザーが次のように入力した場合:

http://www.example.com/show/12

htaccess ファイルに URL を作成してもらいたい:

http://www.example.com/index.php/show/12

それが不可能な場合、常に index.php フロント コントローラーに移動し、「show/ number」を URL に追加して、フロント コントローラーがパラメーターを別のコントローラーに渡すことができるようにする方法はありますか?

私のhtaccessコードは次のとおりです。

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php

すべての URL リクエストが index.php フロント コントローラーに送られ、残りの URL をフロント コントローラーに渡すと想定する必要があります。

私が取得し続けるエラーは次のとおりです。

The requested URL /testing-mod-rewrite/show/12 was not found on this server.

これが役立つ場合、フロントコントローラーのPHPコードは次のとおりです。

include_once('controllers/baseController.php');
$uri = $_SERVER['REQUEST_URI'];
$urifinal = str_replace($uri , '/', $uri);

$request = explode('/', $_SERVER['REQUEST_URI']);
$controller = new BaseController();
$controller->index_action($request);
4

4 に答える 4

1

編集:実際、私はあなたが何を望んでいるのか完全にはわかりません。あなたの質問では、index.phpがない場合はURLに追加したいとします。あなたの質問の下のコメントで、あなたはそれをURLから削除したいと言います。前者は、PHPを使用する方がはるかに簡単である可能性があります。後者は、次の方法で実行する必要があります。


情報をクエリ文字列に渡すことができます。

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?view=$1 [L]

したがって、入力されたURLはexample.com/view/test/fooのようになり、書き換えられた(内部)URLはexample.com/index.php?view=test/fooのようになります。

これで、PHPで次のことができるようになります。

$view = $_GET['view'];
$controller = new BaseController();
$controller->index_action(explode('/', $view));

ある時点で$viewに含まれる入力を検証する必要があることに注意してください。

編集:また、私はこの行を取得しません:

$urifinal = str_replace($uri , '/', $uri);

それは言い過ぎの言い方のようです:

$urifinal = '/';

私が完全に何かを逃していない限り。

于 2012-12-01T23:28:36.767 に答える