1

私はFrontController2つのパラメータを期待してい$_GETます:

controller
action

サイトへの典型的な呼び出しは次のようになります。

http://foo.bar/index.php?controller=start&action=register

私がしたいことは、ユーザーが次の URL でこのサイトにアクセスできるようにすることです。

http://foo.bar/start/register

私が試したこと:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.+)/(.+)$ index.php?controller=$1&action=$2 [L,QSA]
</IfModule>

これにより404エラーが発生するため、機能していないようです。

mod_rewriteそれ自体がサーバー上で有効になっています。

4

2 に答える 2

2

あなた.htaccessが投稿した作品は私のために働きます:

// GET /cont1/action1

print_r($_GET);

/* output
Array
(
    [controller] => cont1
    [action] => action1
)
*/

index.php相対パスではなく、絶対パスを試してみてください。

とにかく、その正規表現は次のようになります。

// GET /cont1/action1/arg1

print_r($_GET);

/* output
Array
(
    [controller] => cont1/action1
    [action] => arg1
)
*/

あなたはやったほうがいいでしょう:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
</IfModule>

そして、コントローラー、アクション、引数などにindex.php分割します...$_GET['url']

于 2012-05-16T19:35:54.127 に答える
0

これを機能させるには、2 つの部分があります。PHP と Apache を使用している場合は、サーバーで書き換えエンジンを使用できる必要があります。

ユーザーフォルダーに、.htaccess次の内容で 名前が付けられたファイルを配置します。

 RewriteEngine on
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule . index.php [L]

次にindex.php、サーバー変数を使用して、REQUEST_URI要求された内容を確認できます。

<?php
$path = ltrim($_SERVER['REQUEST_URI'], '/'); 
echo $path;
?>

誰かが を要求した場合/start/register、上記のすべてのコードが html ルートにあると仮定すると、$path変数にはstart/register.

をセパレーターとして使用する際に爆発機能を$path使用し/、最初の要素をレジスターとしてプルします。

書き換えコードには、ファイル名とディレクトリ名を操作できるという利点があります。

于 2016-01-05T18:02:37.323 に答える