.htaccess URL リライターに関するヘルプが必要です

.htaccess URL リライターに関するヘルプが必要です

PHP/.htaccess を使用して別の SEO システムを実行しようとしています...

以下のルールを適用する必要があります。

  1. 拡張子で終わらないすべての URL をキャッチする必要があります (www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me --> catch しない)。
  2. .php* (.php、.php4...) で終わるすべての URL をキャッチする必要があります (ルール #1 の例外)。
  3. すべてのルールは一部のディレクトリにのみ適用され、ないサブディレクトリ(これまでのところ / および /framework)内にあります。
  4. htaccess は、入力した URL を GET 値で送信して、PHP で操作できるようにする必要があります。

MOD 書き換えウィザードが助けてくれるでしょうか?

編集:

提案された投稿を読んだ後、私はこれを思いつきましたが、ループに陥っていると思います... 誰か助けてくれませんか?

<IfModule mod_rewrite.c>
RewriteEngine On
# 1
RewriteCond %{REQUEST_FILENAME} !\.[^/]+$ [OR]
# 2
RewriteCond %{REQUEST_FILENAME} \.php.*$
# 4
RewriteRule ^(.*)$ http://localhost/seo-urls/seo-urls-mapper.php%3Frequested=$1?%{QUERY_STRING}
</IfModule>

クリスマス休暇中にこれを完了したいので、賞金を追加します :) ご協力ありがとうございます。楽しい休暇をお過ごしください!

答え1

出発点としてこれを試してみてください:

RewriteEngine On

RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI}  !\.(.*)
RewriteCond %{REQUEST_URI}  !^/(framework|restricted)/
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]

RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI}  \.php.?$
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]

最初のルールセット:

  1. GET パラメータが設定されている場合は、このルールを実行しないでくださいuri(そうしないと、パラメータを追加した後に宛先スクリプトにリダイレクトするときにループが発生しますuri)
  2. URIに次のものが含まれている場合は.、このルールセットをスキップします(特定の拡張子に対してより具体的なルールを作成する必要があるかもしれませんが、これは機能します)
  3. URIが制限されたディレクトリの下にある場合は、このルールセットをスキップします
  4. リダイレクトindex.php(ターゲットを変更する必要があるかもしれません)し、uriGETパラメータを設定します

2番目のルールセット:

  1. パラメータが設定されている場合はuri、ループを防ぐためにこのルールセットをスキップします
  2. 要求されたURIが.php、、.php4または同様の文字で終わる.php123場合(ないリダイレクトされる)
  3. リダイレクトindex.php(ターゲットを変更する必要があるかもしれません)し、uriGETパラメータを設定します

mod_rewrite ルールをまとめるのに「魔法使い」は必要ありません。時間をかけて自分で実験し、jscott が推奨するガイドを読んでください。

する優れた説明が必要な場合は、理論的な質問はすべてここで行ってください(回答者があなたの知識を深めるのではなく、あなたのプロジェクトをクラウドソーシングしているように見える実践的な質問とは対照的です)。

関連情報