0

答えはとてもシンプルなものになると思いますが、泣きたいのですが、理解できないようです。私はmod_rewriteを初めて使用します。

リンクをdomain.com/?p=aboutからdomain.com/about* / *(末尾のスラッシュ付き)などに変更したかったのですが、正常に機能しますが、リンクに移動すると、新しいリンクが追加されます。 URLの後ろへのリンク。たとえば、aboutとcontactlinkがあります。アバウトをクリックするとdomain.com/about/に移動し、連絡先をクリックするとdomain.com/about/contact/に移動し、URLの最後にリンクを追加し続けます。domain.comにアクセスしてリンク(この場合はabout)をクリックすると、domain.com / about /に移動し、さらに約4回クリックすると、アドレスバーに「domain.com/」と表示されます。 about / about / about / about / about / "これを以下の非常に簡単な例で再現しましたが、何が間違っているのでしょうか。

.htaccess

RewriteEngine On
RewriteRule ([a-zA-Z0-9]+)/$ index.php?p=$1

index.php

<a href="about/">about</a> | <a href="contact/">contact</a><br><br>

<?php
    if(!isset($_GET['p'])) {
        echo "home";
    } else {
        echo $_GET['p'];
    }
?>

ご協力ありがとうございました!

編集:絶対パスを使用する場合は問題なく機能しますが、絶対に使用する必要がない場合は使用しません。

edit2:追加

RewriteBase /

リンクを解除します。彼らはdomain.com/about/と.../contact /に行くように見えますが、私は404を取得します-私が使用したルールは、リンクを行う方法と何らかの形で互換性がないと思います。そのためです。 index.phpも含めました。

4

3 に答える 3

1

現在のパスを基準にして、すべてのリンクをHTMLで定義しています。

次のようにリンクを変更する必要があります。

<a href="about/">about</a> | <a href="contact/">contact</a><br><br>

になります(URLの先頭/に注意してください):

<a href="/about/">about</a> | <a href="/contact/">contact</a><br><br>

あなたがページにいるとき、site.com/about/usのようなリンク<a href="home/"はブラウザによって解決されますsite.com/about/us/home

解決策は、すべてのリンク、画像、スタイルシート、およびJavaScriptを変更して、現在のような相対パスではなく、URLで絶対パスを使用することです。

編集:あなたの編集に気づきました。相対パスではなく、絶対パスを使用する必要があります。相対URLを保持したい場合は<base href="/" />、すべてのページでのようなものを使用する必要があります。

于 2012-10-23T19:46:12.430 に答える
1

何をするにしても、aをクリックするとURLの末尾に<a href="about/">about</a>追加されます。about/これが相対リンクの仕組みです。

あなたの選択は、賢明な順に:

  1. 末尾のスラッシュを削除するだけです。それがあなたの問題の原因です:

    <a href="about">about</a>
    

    相対リンクは、パスの最後のセクション(最後のセクションの後/)を新しい値に置き換えます。

  2. 先行するを追加し../ます。これは少しハッキーですが、貴重な末尾のスラッシュを保持できます

    <a href="../about/">about</a>
    
  3. /about/aboutからへの301リダイレクトを実行し/aboutます。これにより、アドレスバーがからに変更され/aboutたり/about/about、元に戻ったりします。

于 2012-10-23T19:47:21.063 に答える
1

答えるには少し遅すぎるかもしれませんが、<head>セクションにこの1行を追加すると、トリックが実行されます。

<base href="/"> or <base href="your-domain-name">
于 2016-07-01T12:29:49.873 に答える