0

.htaccessファイルに問題があります。ファイルの拡張子を削除するコードを配置しているので、www.foo.com / xのようになり、すべてのページで正常に機能します。ただし、ナビゲーションバーを使用すると機能しません。各ページのURLをwww.foo.com/xに変更したので、問題が何であるかについて混乱しています。.htaccessファイルのコードは次のとおりです。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]

そして、これが私のナビゲーションバーコードです:

 <ul id="menu">
            <li><a href="http://www.foo.com/" class="active">Home</a></li>
            <li><a href="http://www.foo.com/projects">Projects</a></li>
            <li><a href="http://www.foo.com/about">About</a></li>
            <li><a href="http://www.foo.com/contact">Contact</a></li>
 </ul>

www.foo.com/projectsなどが正常に機能し、正しいページに移動することを追加する場合があります。それが明らかでない場合は、.htaccessファイルもルートフォルダーにあります。

4

1 に答える 1

1

元のルールを内部で書き直そうとすると、ループが発生します。たとえば、URIから始める場合/some/file.html

  1. ブラウザのリクエスト/some/file.html
  2. RewriteRule ^(.*)\.html$ /$1 [L,R=301]一致すると、ブラウザはにリダイレクトされます/some/file
  3. ブラウザのリクエスト/some/file
  4. 内部書き換え/some/file.html
  5. エンジンループを書き換え、最初のルールが再び一致し、ブラウザがにリダイレクトされます/some/file
  6. #3から繰り返す

したがって、最初のルールの実際の要求と照合する必要があります。

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.html
RewriteRule ^ /%1 [L,R=301]

これによりリダイレクトが行われます。リンクがまだ.htmlファイルにある場合は、内部でそれらをhtmlファイルに書き戻す必要があります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ /$1.html [L]

すべてのリンクですでに.html部分が削除されている場合は、最初のルールはまったく必要ありません。

于 2012-08-22T01:36:04.907 に答える