私は文字通りこれで私のテザーの終わりにいます。stackoverflow に関する他の多くの質問と回答を調査しましたが、必要な解決策が見つかりません。自分がやりたいことは不可能だと思い始めています。
では・・・問題はこれです。私は次のようにしたい:例えば
www.mydomain.com/visa-information/country.php?country={COUNTRY-NAME}&passport={PASSPORT-NAME}
次のきれいな URL に:
www.mydomain.com/visa-information/{COUNTRY-NAME}-visa-for-{PASSPORT-NAME}-citizens/
htacces ファイルに部分的に成功したルールがあります。
RewriteRule ^/visa-information/([A-Za-z-]+)-visa-for-([A-Za-z-]+)-citizens/?$ visa-information/country.php?country=$1&passport=$2 [NC]
これは正常に機能し、ブラウザのアドレスバーにURLを入力すると必要なことを実行しますが、私が抱えている本当の問題は、ほとんどすべてのページにあるフォームを介してきれいなURLにリダイレクトすることです.サイト。
以下のようなさまざまなリダイレクトルールを試しました。
RewriteCond %{QUERY_STRING} country=([A-Za-z-]+)&passport=([A-Za-z-]+) [NC]
RewriteRule visa-information/country.php visa-information/%1-visa-for-%2-citizens/? [R,NC,L]
しかし、運がありません。また、上記のリダイレクト ルールに QSA フラグを追加しようとしましたが、無限ループになってしまいます。
country.php ページの上部にある location php リダイレクト ヘッダーを使用して、フォーム送信後に次のようにリダイレクトしようとしました。
if(isset($_GET['country']) && isset($_GET['passport'])) {
header("Location: " . $dir . "/visa-information/" . $currentCountry . "-visa-for-" . $currentPassport . "-citizens/");
exit();
}
私は上記がブラウザーに直接きれいなURLを入力するように機能することを期待していましたが、そうではなく、404エラーが発生するだけです。
どんな助けでも大歓迎です。
ありがとう
ヨルダシュ
編集
私のローカルディレクトリ構造は次のとおりです。
/webserver/mydomain.com/visa-information/etc...
ライブサーバーでは次のようになります。
mydomain.com/visa-information/etc..
ローカル マシンで Apache Alias を使用しているため、RewriteBase を次のように設定しました。
RewriteBase /webserver/mydomain.com/
私は現在、anubhavaが私に与えたものから適応された次のRewriteRulesのセットを持っています:
RewriteCond %{REQUEST_URI} visa-information/country.php [NC]
RewriteCond %{QUERY_STRING} country=([A-Za-z-]+)&passport=([A-Za-z-]+) [NC]
RewriteRule visa-information/ visa-information/%1-visa-for-%2-citizens/? [R=301,L,QSA]
# internal redirect from pretty URL to old URL
RewriteRule ^visa-information/([A-Za-z-]+)-visa-for-([A-Za-z-]+)-citizens/?$ visa-information/country.php?country=$1&passport=$2 [NC,L]
これにより、現在、ブラウザー バーにプリティ URL を入力するときとフォームを使用するときの両方で、エンドレス リダイレクト ループが発生しますが、上位 3 つのルールを無効にすると、プリティ URL をアドレス バーに入力して、書き換えは機能しますが、もちろんフォームの送信からではありません。
何が間違っているのか本当にわかりません。なぜ無限ループがあるのですか?