http://www.netairspace.com/photos/photo.php?photo=3392のような汚い URL があります。http://www.netairspace.com/photos/OH-LTU/Finnair_Airbus_330-202X/OUL_EFOU_Oulu/photo_3392/のようなことをしたい(そして、後でhttp://www.netairspace.com/pic/3392のような短い URL をサポートする) /しかし、私はそれを省略します)。
そこで私はスクリプト photo_seo_url.php を用意しました。このスクリプトは、写真 ID を取得し、SEO URL を構築し、リダイレクトを行います (テスト用に 302、満足できる場合は 301)。次に、古い URL を呼び出すときに .htaccess mod_rewrite ルールを追加することを計画しました。
- 古い URL は内部で photo_seo_url.php に書き換えられます。
- photo_seo_url.php は SEO URL に 301/302 リダイレクトします
- SEO URL は、元の photo.php に内部的に書き換えられます。
そうすれば、理論的には、SEO URL のメリットを享受しながら、古い URL を自由に廃止することができます。
これらは私が使用したルールです:
RewriteEngine on
RewriteRule ^photos/.*/photo_([0-9]+)/?$ photos/photo.php?photo=$1 [NC,L]
RewriteCond %{QUERY_STRING} photo=([0-9]+)
RewriteRule ^photos/photo\.php$ photos/photo_seo_url.php?photo=%1 [NC,L]
しかし、それは無限のリダイレクト ループに入ります。これらの 2 つが外部リダイレクトではなく内部書き換えを行っているのはなぜですか?それとも私が見逃しているのですか?
新しいファイル showphoto.php を追加して、元の photo.php をインクルードするだけで問題を解決し、2 行目を変更しました。
RewriteEngine on
RewriteRule ^photos/.*/photo_([0-9]+)/?$ photos/showphoto.php?photo=$1 [NC,L]
RewriteCond %{QUERY_STRING} photo=([0-9]+)
RewriteRule ^photos/photo\.php$ photos/photo_seo_url.php?photo=%1 [NC,L]
しかし、元のバージョンが無限ループに陥る理由を理解したいと思います。何かを見逃したり、誤解したりしました。私のアプローチは健全ですか?