1

.htaccessの動作についてはまだ少しあいまいで、周りを見回しましたが、この特定の問題に役立つものが見つかりません。

編集:この問題をカバーしているように見える他の質問があることを認識していますが、いくつかチェックしたところ、理解できる助けが得られなかったようで、自分の問題でハイジャックしたくありませんでした。

これは私が持っているものです:

Options +FollowSymLinks
#RewriteBase /
RewriteEngine on
RewriteRule /mp3/(.*) http://old.domain.com/mp3/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ /index.php?p=$1 [L]

最後の行からわかるように、サーバー名の後に入力された文字列は実際にはURLパラメーターであり、そのパラメーターに応じて、データベースからさまざまなコンテンツが取得され、そのページがサイトに表示されます。

私が抱えている問題は、クライアントが「ポッドキャスト」と呼ばれるコンテンツページを持っているため、そのページsite.com/podcastに静かにリダイレクトしsite.com/index.php?=podcastてロードする必要があるということです。残念ながら、クライアントのサーバーにも実際のsite.com/podcast/フォルダーがあります。このため、書き換えは無視され、ブラウザはそのフォルダを読み込もうとします。リストを無効にすると、ファイルリストまたは禁止エラーが表示されます。

いくつかの調査(私はまだhtaccessに慣れていない)の後、パスが実際のファイルまたはフォルダーを指している場合、2行前に書き換えが無効になっていることを知りました。残念ながら、コメントアウトし!-dても効果がないようで、両方をコメントアウトするとサーバーエラーが発生します。

確かに、ここでの問題の一部は先見の明の欠如でした。URLの書き換えは、他のすべてをまとめる前に計画する必要がありましたが、基本的にサイトが完成するまで、クライアントがその部分を含まない「フレンドリーなURL」を望んでいることが通知されました?p=。とにかく、おそらくこれを修正する方法があります。

入力されたURLが実際に存在するフォルダー(特定のファイルではない)を指している場合でも、強制的に書き換える.htaccessのトリックはありますか?!-d前に述べたように、理由はわかりませんが、を削除しても効果がないようです。おそらく私はその目的を誤解しています。

助けてくれてありがとう、そして私が明白な何かを見落としたなら私に寛大になってください。これは現在クライアントのライブサイトに表示されている問題であるため、少し急いで解決しているように感じます。再度、感謝します。

OH YEAH、そしてソリューションはに固有にすることはできません/podcast。クライアントのサイトの設定方法で、サイトの新しいサブページを作成する場合、ページのタイトルに基づいてそのコンテンツに新しい名前が保存され、別のページが可能です(可能性は低いですが、それでも可能です)。サーバー上の既存のフォルダーと一致する名前で作成できます。

4

2 に答える 2

3

これがmod_rewriteドキュメントからのメモです:

デフォルトでは、mod_rewriteは、ディスク上のディレクトリにマップされているが末尾にスラッシュがないURLを無視します。これは、mod_dirモジュールが、末尾にスラッシュが付いた正規URLへのリダイレクトをクライアントに発行することを期待しています。

これは、mod_rewriteがURLを無視する理由を説明しています/podcast。(誤って)記事名と一致しないように、物理ディレクトリの名前を変更することをお勧めします。

別のオプションは、DirectorySlash設定を無効にすることです。これにより、Apacheがにリダイレクトさ/podcastれなくなり/podcast/ます。

DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ /index.php?p=$1 [L]

この設定を無効にすると副作用が発生することに注意してください。最初にドキュメントを読んでください。

于 2013-01-19T12:50:43.467 に答える
0

次のコード行を変更します。

RewriteRule ^([^/]*)$ /index.php?p=$1 [L]

RewriteRule ^(podcast([^?]*)) index.php?p=$1 [L,NC]
于 2013-01-19T07:54:25.103 に答える