web-dev-qa-db-ja.com

Webサイトのあるページから別のページにリダイレクトすると、.htaccessファイルを使用した後に404エラーが発生する

現在、PHPブログに取り組んでいます。 .htaccessファイルを使用してクリーンなURLを取得した場合のコードは次のとおりです。

RewriteEngine On
RewriteCond %{HTTPS} !=off
RewriteCond %{HTTP_Host} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^([0-9]+)/([a-zA-Z0-9_-]+)?$ post.php?post_id=$1&title=$2 [L]
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]

このコードをオンラインで入手しました。私はPHPとこの.htaccessに慣れていないので、それについてあまり知らないのはそのためです。

.htaccessファイルを追加する前のURL:

http://www.example.com/post.php?post_id=12&title=post-title

そして、.htaccessファイルを追加した後のURL:

http://www.example.com/12/post-title

だからRewriteRuleは私に欲しいURLをくれた。ただし、ページのリダイレクトでエラーが発生しました。次のURLにアクセスした後、ホームボタンをクリックするたびに.htaccessファイルを使用する前に:

http://www.example.com/post.php?post_id=12&title=post-title

次に、URLがホームページに正常にリダイレクトされました。つまり、

http://www.example.com/index.php

ただし、同じURLにアクセスした後に.htaccessファイルを使用すると、次のようにリダイレクトされます。

http://www.example.com/12/index.php

そして今、それは404ページが見つかりませんエラーを発生しています。技術的には、サーバー上の12ディレクトリの下にそのようなページが存在しないためです。したがって、基本的にすべてのファイルの前に12を追加します。

そのため、次のリンクにアクセスした後、http://www.example.com/12/post-title.htaccessファイルを追加する前にページをリダイレクトしていたので、適切にリダイレクトする必要があります。

2
Mike Kothari

ルートの相対URL(例:index.php)からではなく、relative URL(例:/index.php)にリンクしているようです。絶対URL(スキーム+ホスト+ URLパス)でも。

たとえば、index.phpにリンクし、URL /12/post-titleにいる場合、これは当然/12/index.php(不正)に解決されます。一方、/index.phpにリンクする場合、これは/index.php(正しい)に解決されます。

ただし、URLにindex.phpが本当に必要ですか?通常、ディレクトリにリンクし(末尾にスラッシュを付けて)、サーバーに適切なディレクトリインデックスで応答させます。例えば:

<a href="/">Home</a>
1
DocRoot