2

CI を学習しようとしていますが、スターター チュートリアルを完了したところです。URL が末尾のスラッシュで終わる場合、一部のリンク HREF が機能しないことがわかりました。たとえば、次のリンクです。

<?php foreach ($news as $news_item): ?>

    <h2><?php echo $news_item['title'] ?></h2>
    <div id="main">
        <?php echo $news_item['text'] ?>
    </div>
    <p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p>

<?php endforeach ?>

私がオンになっているとき、ストーリーへのリンクは正常に機能します

/index.php/news

しかし、私がオンの場合はそうではありません

/index.php/news/

私が言うように、これはチュートリアルから正しいので、何が起きているのかわかりません.

HREFを絶対にすることができます....

<p><a href="<?php echo config_item('base_url').config_item('index_page').'/news/'.$news_item['slug']; ?>">View article</a></p>

...しかし、私がする必要はないと考えてください。

何かご意見は?

4

5 に答える 5

2

次のようにします。

<a href="/news/<?php echo $news_item['slug'] ?>">View article</a>

先頭にスラッシュを追加するだけ

更新しました:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|uploads|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

これをアプリケーションのルートにある .htaccess ファイルと codeigniter の構成ファイルに追加します。

$config['index_page'] = ''; //make it like this 

/index/news を使用する必要はありません。サイトのルートから /news を使用するだけです。

したがって、次のように使用できます。

<a href="/news/<?php echo $news_item['slug'] ?>">View article</a>

それは仕事を閉めた

于 2012-10-21T14:14:26.890 に答える
2

問題を診断するのに十分な情報がここにない可能性があります。「動作しません」 -- エラーは何ですか? 完全な URL はどのように見えますか?

Apache とサーバーの構成に関連している可能性があります。構成を編集して、「PATH_INFO」と「REQUEST_URI」を試してみてください。

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

最後に (これは少しだけ関連があります)、Codeigniter で URL を作成する最良の方法は、site_url() 関数 (完全な URL を作成する) です。

echo site_url("news/local/123");
于 2012-10-21T14:51:06.447 に答える
2

次の形式の URL がある場合、相対 URL は期待どおりに機能しません。

その理由は、相対 URL が完全な URI パスを参照として使用するためです (つまり、「相対」)。そのため、 (末尾のスラッシュがないことに注意してくださいstuff/things) の URI パス上で (前のスラッシュに注意してください)を参照すると、フォルダー内に何かが必要であると想定されるため、取得されます。/stuff/things/stuff/stuff/thingsstuff

CodeIgniter のsite_url()関数を使用すると、絶対 URL (ドメインを含む) が生成されます。

site_url('stuff/things')となりますhttp://domain.com/stuff/things

この場合、具体的にはecho site_url('news/'.$news_item['slug']);、アンカーの href 内で使用します。echo anchor('news/'.$news_item['slug'], 'Link text to this article');HTML を書かずに、記事へのリンクをエコーすることもできます。

1 つの注意事項 - URIsite_url()に含まindex.phpれます (構成ファイルから削除されていない場合)。したがって、画像、javascript、css などを参照する場合は、構成変数base_url()のみを参照する which を使用します。base_path

編集:言及するのを忘れていましたが、これらの機能を機能させるにはURL Helperを使用する必要があります。

于 2012-10-21T14:53:18.743 に答える
1

手遅れかもしれませんが、すべての提案を行ったにもかかわらず、私はこの問題に苦しんでいます。今、それは最終的に動作します

$config['base_url'] = '/myrootfolder/';

それ以外の

$config['base_url'] = 'http://localhost/myrootfolder/';
于 2016-04-26T10:55:22.990 に答える
0

config.php を開き、 index.php を削除します。

その後、使用

echo base_url('news').'/'.$news_item['slug']

次に、ルートを次のように構成します

$route['news/(:any)'] = 'news/index/$1';
于 2012-10-21T14:29:40.973 に答える