PHP/.htaccess を使用して別の SEO システムを実行しようとしています...
以下のルールを適用する必要があります。
- 拡張子で終わらないすべての URL をキャッチする必要があります (www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me --> catch しない)。
- .php* (.php、.php4...) で終わるすべての URL をキャッチする必要があります (ルール #1 の例外)。
- すべてのルールは一部のディレクトリにのみ適用され、ないサブディレクトリ(これまでのところ / および /framework)内にあります。
- 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]
最初のルールセット:
- GET パラメータが設定されている場合は、このルールを実行しないでください
uri
(そうしないと、パラメータを追加した後に宛先スクリプトにリダイレクトするときにループが発生しますuri
) - URIに次のものが含まれている場合は
.
、このルールセットをスキップします(特定の拡張子に対してより具体的なルールを作成する必要があるかもしれませんが、これは機能します) - URIが制限されたディレクトリの下にある場合は、このルールセットをスキップします
- リダイレクト
index.php
(ターゲットを変更する必要があるかもしれません)し、uri
GETパラメータを設定します
2番目のルールセット:
- パラメータが設定されている場合は
uri
、ループを防ぐためにこのルールセットをスキップします - 要求されたURIが
.php
、、.php4
または同様の文字で終わる.php123
場合(ないリダイレクトされる) - リダイレクト
index.php
(ターゲットを変更する必要があるかもしれません)し、uri
GETパラメータを設定します
mod_rewrite ルールをまとめるのに「魔法使い」は必要ありません。時間をかけて自分で実験し、jscott が推奨するガイドを読んでください。
する優れた説明が必要な場合は、理論的な質問はすべてここで行ってください(回答者があなたの知識を深めるのではなく、あなたのプロジェクトをクラウドソーシングしているように見える実践的な質問とは対照的です)。