変数を URL の最初のセグメント www.example.com/0jf08h204 に配置する URL 短縮スキームを使用しようとしています。私のデフォルトのコントローラーは「home.php」で、.htaccess mod-rewrites を配置しています。これを管理する最善の方法は何ですか? 標準の /controller/method/variable スキームによってスマートがブロックされていると思いますが、これは URI プロトコルの設定ですか? ありがとうございました!
3 に答える
マシューの応答に追加します。
system/application/config/routes.php
ファイルに必要なものは次のとおりです。
$route['(:any)'] = "home";
これにより、すべてがリダイレクトされます。
使用する必要がある他のコントローラーがある場合は、すべてをリダイレクトしたくない場合があります。その場合は、代わりに次の正規表現を使用できます。
$route['^(?!about|contact)\S*'] = "home";
これにより、コントローラ「about」または「contact」以外のすべてをリダイレクトできます。これらは「about.php」および「contact.php」コントローラに送信されます。
CodeIgniter 内ではワイルド カードを使用しないことに注意してください。ワイルド カードの方が適切に機能する場合がありますが、リダイレクト後に手動で $_SERVER['REQUEST_URI'] を解析することにしました。ただし、ワイルドカードを使用したい場合/$1
は、マシューの応答にあるようにルートに追加するだけです。
私自身はRoutingをあまり使っていませんが、次のようなことを試すことができると思います。
$route['(:any)'] = "controllername/actionname/$1";
ただし、これを自分で試したことはありません。
特定の領域をホワイトリストに登録することは少し標準的ではないように思えますが、404 エラーがどのように処理されるかについてはまだ頭を悩ませていますが、evolve の正規表現を使用して現在機能している方法を次に示します。私の home.php コントローラ ファイル:
class Home extends Controller {
function Home()
{
parent::Controller();
$uri = uri_string();
if(!empty($uri)) {
$uri_array = explode('/',$uri);
$first_segment = $uri_array[1];
if(isset($first_segment)) {
//do stuff, load alternative view
}
}
}
function index()
{
$this->load->view('home_view');
}
}
/* EOF */
助けてくれてありがとう、可能な場合は別のソルンを投稿してください。