web-dev-qa-db-ja.com

numberで始まる場合、mod_rewriteはQUERY_STRINGを空にします。

私はWordPressのインストールと一緒に簡単なデータベースクエリスクリプトを持っています。それに私は次のURLを使ってパラメータを渡します:http://example.com/db/?p=foo

私のデータベーススクリプトは、次のようにしてパラメータを読み取ります。

$pid = $_GET['p'];

パラメータがNUMBERで始まらない場合は、反転処理は正常に機能します。

そのため、?p=fooは問題ありませんが、?p=3pooはEMPTYです。

編集:私は自分のスクリプトを

<?php
print_r($_GET);
exit;

これは出力として与える

Array ( )

数値で始まるパラメータを抑制するのはmod_rewriteだと思います。しかし、なぜ、そしてどうやってこの振る舞いを変えることができるのか私にはわかりません。何か案は?

編集:残念ながら、私はパラメータ 'p'の名前を変更することはできません、またそれらが数字で始まらないようにパラメータの値を変更することはできません。この正確なURLを機能させるための回避策が必要です。

これがルートフォルダにある私の.htaccessファイルです(MrWhiteの提案に従って編集、期待通りに動作します)。

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>
1
nounours

Tomのおかげで、私はプラグインをもっと注意深く見ました。

そして、問題がmod_rewriteに関係しているのではなく、プラグインの衝突に関係していることを確認できます。 (私がそのような疑いを投稿したことを残念に思うが、私はそのように説明された非常に似た問題をどこかで読んだ。

プラグインによってプラグインを無効にすると、私はあなたがこの動作をしたものを見つけました。その理由はまだわかりませんが、少なくとも私には回避策があります。このプラグインを無効にすることです。

あなたの助けをありがとうトムと他のすべての人!

3
nounours

最後に、クエリを書き換えるためにmod_rewriteを使用する@MrWhiteのアドバイスを使用して、問題を完全に理解し解決しました。ありがとうございます。

説明する:

1)私の http://example.com/db/?p=foo は実際にはdbqueryにアクセスしていません.phpスクリプトですが、プラグイン "INCLUDEME"を使用してdbquery.phpスクリプトを呼び出すwordpress-page "db"です。

2)だから、クエリ文字列は最初にWordpress(あるいは何でも正しい用語がわからない)によって処理され、そして@Tom J Nowellが指摘したように - 私のパラメータ "p"は特別な意味を持っていたので"Wordpress"によるもので、まだクエリ文字列がプラグインに追加されていません。だから、プラグインのせいではありません。

3)結論:mod_rewriteではなく、プラグインではなく、数字で始まる値が問題ではありませんでしたが、「p」を使用したという単純な事実が問題の原因でした。

4)解決策は次のとおりです。

a)WPページの名前を "db"から "nachverfolgbarkeit"に変更します。

b) "db"という名前のディレクトリを作成します。

c)dbから新しいページ "nachverfolgbarkeit"(INCLUDEMEを使用してdbquery.phpを呼び出す)にリダイレクトするために、以下のリダイレクトを含む.htaccessファイルをdbに配置します。 "p"から "pid"へのパラメータの修正

非常にいいパッチではありませんが、うまくいきます。だから私はすべての読者にアドバイスをします。「決してpをパラメータ名として使わないでください」...

彼らの助けをくれてありがとう。名詞

RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=(.*)$
RewriteRule ^$ /nachverfolgbarkeit/?pid=%1   [R=301]
2
nounours