2

複数の再書き込みコマンドを実行し、うまく機能する .htaccess ファイルがあります。ただし、テスト中に、$_SERVER 変数に id を設定するという 1 つの重要な情報を省略しました (PHP スクリプトで $_SERVER を使用しています)。

URL example.com/f/847f34c76f64cad96effc8e9c3cea176 があり、長い文字列は ID を表し、f はリクエストを処理するスクリプトを表します。

スクリプト部分を処理する次の書き換えがあります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/robots.txt
RewriteCond %{REQUEST_URI} ^/f/(.*)$ [NC]
RewriteRule ^ /scriptf.php [L]

私が言ったように、これはリダイレクトを正しく処理します。ただし、環境変数に配置された id も必要です。なんか、こんなことを考えていました

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/robots.txt
RewriteCond %{REQUEST_URI} ^/f/(.*)$ [NC]
RewriteRule ^ - [E=id:$1]
RewriteRule ^ /scriptf.php [L]

残念ながら、これは機能しません。

また、クエリで ID を送信することは、私の場合は有効な解決策ではありません。

EDIT:参照用のエラーログ出力:

[Tue Oct 08 10:48:31 2013] [error] [client 192.168.77.53] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
4

1 に答える 1

1

idで使用できるようにする場合は$_GET['id']、コードを次のように変更します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^f/(.+)$ /scriptf.php?id=$1 [L,QSA,NC]

またはそれ以外の場合はid、配列で使用できるようにする場合は$_SERVER、コードを次のように変更します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^f/(.+)$ /scriptf.php [L,NC,E=ID:$1]

次に、PHP 内で次の変数を使用できます。

$_SERVER["REDIRECT_ID"]
于 2013-10-08T13:43:31.147 に答える