3

さて、私は少し周りを見回しました、そして私は答えを見つけることができないようです。

今、私はあなたにコードのブロックだけを与えて、「これは修正です」と言うように求めているのではありません、あなたがそれをどのようにしたか、あなたが思いついたものなどを説明したいと思います。これについてもっと知るために、そして学ぶ唯一の方法は例によるものです。

今私がする必要があるのは:

現在、私のブログ(Word Press Go Figure、彼らが世界を所有しているため)はルートディレクトリにあります。したがって、私の投稿は次のようになりますhttp://localhost/hello-world。ほんの一例です。

ただし、Code Igniterを使用してカスタムビルドされたPHPスクリプトを使用して、サイトを拡張したところです。Code Igniterスクリプトをルートディレクトリに配置し、ブログを/main/または/blog/に移動する必要があります。私は自分のブログを削除したくありませんが、Googleがそこにあるすべてのブログ投稿のインデックスを再作成する必要がないようにしたり、Googleが悪い投稿URLにつながるようにしたりしたくありません。さらに重要なことに、私はここに何時間も座って、すべてのブログ投稿(何百ものブログ投稿)へのリダイレクトURLを作成する必要はありません。

ここで、リダイレクトを301リダイレクトにする必要があります。

これが私が遭遇した問題です。

.htaccessにこれを含める必要があります:

 RewriteEngine on
 RewriteCond $1 !^(index\.php|admin|css|img|js|main|favicon.ico)
 RewriteRule ^(.*)$ index.php/$1 [L]

これにより、醜いlocalhost / index.php / controller /controller-function/が削除されます。

ただし、.htaccessですべてを/にリダイレクトする必要がありますが、既に持っているプリセットURLはリダイレクトしません。

私がCodeIgniterを介して持っているプリセットURL引数は次のとおりです。

/details/
/register/
/city/
/search_process/
/login/
/logout-success/
/login-success/
/logout/
/login/
/manage/
/panel/

つまり、本質的には..

localhost / hello-world /は、localhost / main/hello-worldに301リダイレクトする必要があります

localhost /(上記のいずれか)/は/main/または/blog/にリダイレクトする必要はありません

また、現在の.htaccessで気付いた場合は、/ admin / / css / / img / / js /(/ main /は明らかにブログです)やfavicon.ico(見栄えが良いため)などの特定のものを許可しました。

学校に通ってください!(どのくらいの頻度でそれを聞きますか?:P)

クレジットはローレンスシェローネに行きます!

彼は最初に私に答えをくれました、そしてそれから今まで私は最初にタイプミスをしたと思います、そして偶然にコードを失いました、そしてそれはコピー/貼り付けの後に2回目は機能しませんでした(私が実際に最初にタイプしたのでそれを学ぶためにそれを)。

したがって、ここでは、変更された作業ソリューションについて説明します。ローレンス・チェローネ(この質問に対する回答を受け入れた人)が私にこれを理解するのを手伝ってくれたので、私は完全に信用します、そして最終的に私は彼なしではこの実用的な解決策を得ることができませんでした。

RewriteEngine on
RewriteCond $1 !(panel|manage)
RewriteRule ^(.*)$ http://localhost/choosefitness/main/$1 [R=301,L]

RewriteEngine on
RewriteCond $1 !^(index\.php|admin|css|img|js|less|favicon.ico)
RewriteRule ^(.*)$ index.php/$1 [L]

http://localhost/choosefitness/first-argumentこれは、最初の引数が/panelまたは/manageでない限り、単純に述べています。/ main /に301リダイレクトする必要があります(main / $ 1だけでなく、301リダイレクトの完全なURLを提供する必要がありました)

次に、admin css imgjslssまたはfavicon.icoで行われたリクエストはすべて無視する必要があることを示しています。それ以外の場合は、index.phpで作成する必要があります(これにより、コードイグナイターのURLからindex.phpが削除されます)

なぜそれが機能するのかわかりません。ただし、完全にはテストしていませんが、リダイレクトせずに/ cssにアクセスできると思います。最初のRewriteCondに、|cssを追加する必要があります。ただし、サーバーは、アクセスしなくてもcssファイルにアクセスできます。

4

1 に答える 1

2

これはテストされておらず、かなり間違いindex.php/$1/$2ですが... CIルールに一致するルールを含めてから、CIコントローラーに渡すことができます。一致しない場合は、/blog/URLに書き換えます。また、エスケープすることを忘れないでください。一部でfavicon\.ico

RewriteEngine on
RewriteCond $1 !^(index\.php|admin|css|img|js|main|favicon\.ico)

RewriteRule ^(details|register|city|search_process|login|logout-success|login-success|logout|login|manage|panel)/(.*)$ index.php/$1/$2 [L]
RewriteRule ^(.*)$ /blog/$1 [L]

編集:パラメータが最前面にある場合は、ルールを次のように切り替えます。

RewriteRule ^(.*)/(details|register|city|search_process|login|logout-success|login-success|logout|login|manage|panel)$ index.php/$1/$2 [L]
于 2012-04-16T20:19:18.590 に答える