web-dev-qa-db-ja.com

.htaccessファイルを使用してPHPスクリプトを別のスクリプトに静的にマッピングすると、404エラーが発生します

URL書き換えのトピックに関する多くの記事を読んだ後も、404ステータスエラーが発生したままです。

私の目標:

A 'static'次のようにURLを書き換えます(ユーザーが1つのURL /スクリプトをクリックするか入力しますが、内部的に他のURL /スクリプトが実行されます-パラメーターも「静的」なので、私はできないと思いますルールで(*.)および$1のあらゆる種類のパターンを使用します...:

  • domain.tld/en/abc.php?fooからdomain.tld/en/xyz.php?bar(第1レベル)
  • domain.tld/en/abc.php?foo&blablaからdomain.tld/en/xyz.php?bar&otherstring(第2レベル)

追加情報:

  • ディレクトリ「en」が存在します。
  • スクリプトabc.php しない存在する
  • スクリプトxyz.phpが存在し、指定された静的パラメーターで正常に動作します

私の.htaccess:

Options +FollowSymLinks 
RewriteEngine On
RewriteRule ^en/abc\.php\?foo&blabla$ /en/xyz.php?bar&otherstring [NC,L]
RewriteRule ^en/abc\.php\?foo$ /en/xyz.php?bar [NC,L]

この単純な最後のルールでは、すでに404エラーが発生しています。 rewritelogにアクセスできません。

4
LarryG001

RewriteRuleパターンを使用してクエリ文字列を確認することはできません(クエリ文字列は、ホスト名などのように、パターンマッチングの前に削除されます)。したがって、上記で説明したルールは単に一致せず、404を取得します。ただし、RewriteCondディレクティブを使用してクエリ文字列を確認できます。

例えば:

domain.tld/en/abc.php?fooからdomain.tld/en/xyz.php?bar

RewriteCond %{QUERY_STRING} =foo
RewriteRule ^en/abc\.php$ /en/xyz.php?bar [L]

これは、クエリ文字列「foo」と完全に一致することに注意してください。大文字と小文字を区別しない一致が特に必要でない限り、NCフラグを削除しましたか?

2
MrWhite