Seoの理由から、codeigniterのURLのアンダースコアをダッシュに変更する最も簡単な解決策を知りたいです。
私のコントローラーは次のようになります。
public function request_guide() {
...Load view etc...
}
したがって、このページを参照するには、次の場所に移動する必要があります。
www.domain.com/request_guide
しかし、私はもっとseoにやさしくなり、アンダースコアの代わりにダッシュを使用したいと思っています。
www.domain.com/request-guide
Codeigniter関数にはアンダースコアが必要だという印象を受けています(間違っている可能性があります)。
以前のプロジェクトでは、単にmod_rewriteを使用していましたが、これらのアクションはルートを使用して実行できると思います。
アンダースコアをダッシュに置き換えてURLを書き直す最も簡単な方法は何ですか?
で見つかったルート構成
config/routes.php
ここにあなたの友達です。
シンプルな
$route['request-guide'] = "request_guide" ;
あなたのためにこれを行います。
それは本当にあなたの意図に依存します。 1ページだけを変更したい場合は、devrooms 'ソリューションが最適です。
$route['request-guide'] = "request_guide";
ただし、これをWebサイトのデフォルトの動作にしたい場合は、コアルータークラスを次のように拡張する必要があります(ソース: [CodeIgniterでアンダースコアの代わりにハイフンを使用] )
このコードを挿入します。
<?php
defined('BASEPATH') || exit('No direct script access allowed');
class MY_Router extends CI_Router {
function _set_request ($seg = array())
{
// The str_replace() below goes through all our segments
// and replaces the hyphens with underscores making it
// possible to use hyphens in controllers, folder names and
// function names
parent::_set_request(str_replace('-', '_', $seg));
}
}
?>
UPDATE(2015年10月26日):@ Thomas Woodが述べたように、CodeIgniter3でこれを行うためのより良い方法があります:
$route['translate_uri_dashes'] = TRUE;
Code Ignitor 3には、次のものが組み込まれています。
$route['translate_uri_dashes'] = FALSE;
TRUE
に変更するだけで、_
または-
のいずれかを使用できます。
Application/config /routes.phpを開いて変更します
$route['translate_uri_dashes'] = TRUE;
それはあなたがする必要があることです。
これで、www.domain.com/request-guideにアクセスすると、request_guideコントローラーがインスタンス化されます。
_(アンダースコア)を含む名前のすべてのコントローラーで機能します。
Codeigniterのカスタムルーティングをご覧ください http://codeigniter.com/user_guide/general/routing.html
$route['request-guide'] = "request_guide";
あなたができることは、カスタムフックを作成することです(PST ...基本的なCodeIgniterスキルが必要です):CodeIgniterに関する詳細情報 フック-フレームワークコアの拡張
/*
* the hooks must be enabled from the config file
* replace underscore with dashes (hyphens) for SEO
*/
function prettyurls() {
if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '') {
$newkey = str_replace('-', '_', key($_GET));
$_GET[$newkey] = $_GET[key($_GET)];
unset($_GET[key($_GET)]);
}
if (isset($_SERVER['PATH_INFO']))
$_SERVER['PATH_INFO'] = str_replace('-', '_', $_SERVER['PATH_INFO']);
if (isset($_SERVER['QUERY_STRING']))
$_SERVER['QUERY_STRING'] = str_replace('-', '_', $_SERVER['QUERY_STRING']);
if (isset($_SERVER['ORIG_PATH_INFO']))
$_SERVER['ORIG_PATH_INFO'] = str_replace('-', '_', $_SERVER['ORIG_PATH_INFO']);
if (isset($_SERVER['REQUEST_URI']))
$_SERVER['REQUEST_URI'] = str_replace('-', '_', $_SERVER['REQUEST_URI']);
}
ファイルにcustomhooks.phpという名前を付けました。
次に、これをapplication/configのhooks.phpファイルに追加します。
$hook['pre_system'] = array(
'class' => '',
'function' => 'prettyurls',
'filename' => 'customhooks.php',
'filepath' => 'hooks',
'params' => array()
);
フックを有効にするには、application/config/config.phpファイルを編集する必要があります
$config['enable_hooks'] = TRUE;
追加:
$ this-> uri-> uri_string()を使用すると、ハイフンでつながれたままになるように、次のようにします コアシステムクラスの作成
class MY_URI extends CI_URI {
function uri_string() {
return str_replace('_', '-', $this->uri_string);
}
}
この_remap()メソッドを使用して、このような動作を処理できます。このメソッドをコントローラーに配置するか、コアコントローラーを作成してに配置します。
public function _remap($method, $params = array()){
if(method_exists($this, $method)){
return call_user_func_array(array($this, $method), $params);
}else{
$method = str_replace("-", "_", $method);
if(method_exists($this, $method)){
return call_user_func_array(array($this, $method), $params);
}
}
show_404();
}