0

301リダイレクトが機能していないようです。mod_aliasはmod_rewriteとともに有効になっています。

私の書き換えは正常に機能しますが、301は機能しません。基本的に私がやろうとしているのは、動的なphpページから「クリーンな」URLを設定することです。これは正常に機能します...

これらの動的ページのそれぞれの他の部分では、正しい「クリーンな」URLにリダイレクトしてもらいたいと思います。

これが私の.htaccessです

#
# Options below ensure that all traffic is directed to www.mydomain
#
Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^mydomain.com
RewriteRule (.*) http://www.mydomain.com/$1 [R=301,L]
RewriteRule ^index.php$ http://www.mydomain.com/ [R=301,L]

#
# URL Rewrites
#
RewriteRule videos page.php?id=1 [L]

#
# Custom redirects from OLD URLs
#
redirect 301 /page.php?id=1 /videos

達成しようとしています...

mydomain.com/videos

(this works - redirect does not)  

誰かが動的ページ(page.php?id = 1)にアクセスすると、クリーンなURLに自動的にリダイレクトされます。

mydomain.com/page.php?id=1 -> mydomain.com/videos

RewriteRuleでR=301を使用しようとしましたが、致命的なエラーが発生します。そのため、リダイレクト301を作成しましたが、期間が機能しません。

4

1 に答える 1

0

さて、訪問者が/ videosをリクエストした場合、リクエストを実際のパス/page.php?id=1にサイレントに書き換えて、「クリーンな」URL / videosをアドバタイズし、クエリ文字列の醜さを隠すことができるようにします。

ただし、実際に/page.php?id=1を要求する訪問者に、「クリーンな」URL / videosに永続的にリダイレクトさせて、クエリ文字列の醜さがもはや目に見えないというメッセージを受け取るようにする必要もあります。

問題は、書き換えられたリクエストでさえ、Apacheディレクティブを最初からやり直す必要があることです。つまり、cleanはactualに書き換えられ、次にcleanにリダイレクトされ、actualに書き換えられます。これが、致命的なエラーが発生する理由です。

このループを解除する唯一の方法は、実際のパスを変更するか、ダミー変数を挿入することです。これにより、書き換えが1回行われると、RewriteEngineを停止できます。

たとえば、次を使用できます。

RewriteCond %{QUERY_STRING} !&redirect=done$
RewriteCond %{QUERY_STRING} ^id=1
RewriteRule /page.php /videos [R=permanent]
RewriteRule /videos /page.php?id=1&redirect=done

redirect=doneこれは常に/videosを/page.php?id=1&redirect=doneにサイレントに書き換えますが、page.phpのリクエストに(および)で終わるクエリ文字列がない場合にのみ/page.phpを/videosにリダイレクトします)で始まるクエリ文字列がありますid=1

それは複雑ですが、それは私が無限ループを壊すと考えることができる唯一の方法です。

于 2013-03-25T19:06:55.297 に答える