0

私の現在のプロジェクトでは、すべての登録ユーザーにブログ機能を提供するように依頼されました。つまり、登録すると、サイトで自動的にブログを書くことができます。これは簡単にできましたが、http://username.site.com特定のユーザーのブログをユーザー名で参照するような形式の URL を使用するように指示されました。

.htaccess ファイルでこれを達成しようとしていますが、条件は満たされているようですが、書き換えの無限ループが原因で 500 Internal Server Error が発生しています。それを避けたいのですが、適切な解決策が見つかりません。これまでの.htaccessは次のとおりです。

<IfModule mod_rewrite.c>

   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteBase /

   RewriteCond $1 !^(index\.php|images|tinymce|files|css|js|robots\.txt)
   RewriteRule ^(.*)$ /index.php/$1 [L]

   RewriteCond %{HTTP_HOST} !^www. [NC]
   RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-_]+).dev.example.com [NC]
   RewriteRule ^(.*)$ /index.php/blog/%2/$1 [L]

</IfModule>

追加情報: サイトはサーバーでホストされていますが、非表示になってdev.example.comいるため、ブログの URL は のようusername.dev.example.comになります。サイトが開始されると、これはもちろん になりますusername.example.com。Codeigniter で構築されています。

その .htaccess を改善するための提案があれば、よろしくお願いします。

4

1 に答える 1

0

これを行う最善の方法は、.htaccess を使用しないことです。

これは私がすることです:

  1. ワイルドカード DNS レコードを作成する *.example.com
  2. ブログ モーダルを作成し、$_SERVER['HTTP_HOST'] を取得して展開し、ドメインを削除します。DB テーブルでルックアップを行います。

編集:

  1. ワイルドカード DNS レコードを作成します。たとえば、CNAME *.example.com > www.example.com を作成します。このように、kyle.example.com に移動すると、実際に www.example.com が読み込まれます。

  2. ブログ モデルを作成します。

row_count() > 0) { $blogInfo = [ 'blog_id'=>123, // データベースからの値 'blog_name'=>'Kyles テスト ブログ', ... ]; $this->session->set_userdata($blogInfo); $ブログ情報を返します。} そうでなければ { false を返します。} } } ?>

// コントローラー

session->userdata('blog_id')) { // ブログ ID が保存されていません session $this->load->model('blog_model'); // ブログモデルをロード $url = str_replace('.example.com', '', strtolower($_SERVER['HTTP_HOST'])); // 現在のホスト名を取得します。例: kyle.example.com if($url !== 'www') { if($blog_info = $this->blog_model->checkForValidBlog()) { // ブログをロードします redirect(' /blog/' . $blog_info['blog_id'] . '/'); } else { show_error('エラー - ブログが見つかりません', 404); } } } else { // ブログを読み込みます redirect('/blog/' . $blog_info['blog_id'] . '/'); } } } ?>
于 2013-03-01T16:45:21.447 に答える