3

1行しかないindex.phpがあります

<?php echo $_GET['a']; ?>

また、2行しかない.htaccessがあります

RewriteEngine on
RewriteRule ^([a-z]+)$ ?a=$1

/ab.cd入力すると 404 エラーが発生するのに、入力/abcd.しても 404 エラーが発生せず、PHP がエコーabcdする (URL の末尾にドットがない) のはなぜですか。

abcd.404 エラーが発生する代わりに、書き換えルールが許可される理由を誰か教えてもらえますか?

4

3 に答える 3

0

編集:

開発環境でRewriterule(スタンドアロン)をテストしたところ、動作します。それは私のものを通り抜けることができません/abcd.-それは私に404エラーを与えるので、あなたの環境のどこかにあなたのルールに影響を与えている何かがあるに違いありません。

-最初の投稿-

あなたのピリオド(。)/ab.cdはRewriteruleで定義されていないようです-小文字のaz文字だけです。

使用する:

RewriteEngine on
RewriteRule ^([a-z.]+)$ ?a=$1
                  ^
于 2012-11-08T14:27:14.647 に答える
0

使用した正規表現は([a-z]+)、小文字の「a」から「z」にのみ一致します。の試みのように、一連の文字の後にピリオドが続き、その後に一連の文字が続くことは決してありませんab.cd

ピリオドも一致させたい場合は、が必要([a-z.]+)です。

于 2012-11-08T14:27:15.023 に答える
0

サーバーで状況を再構築したところ、目的の 404 エラーが発生しました。[L]RewriteRule にフラグを追加しただけです。

.htaccess

RewriteEngine on
RewriteRule ^([a-z]+)$ test.php?a=$1 [L]

test.php

<?php echo $_GET['a']; ?>

あなたのリクエストを妨げる可能性のある他の書き換えルールはありますか? 含まれる他のファイルでも?その場合、L フラグが役立つ場合があります。

于 2012-11-08T15:41:19.990 に答える