1

ほとんどのページはクエリ文字列でアクセスされるため、URLは次のようになります。

http://www.example.com/?var=val&var2=val2

Webのどこかで、誰かが次のようなリンクで私たちにリンクしていることがわかりました。

http://www.example.com/%3Fvar%3Dval%26var2%3Dval2

.htaccessファイルに追加するコードの大きなブロックを見つけましたが、ページリクエストが本当に遅くなりました。私が欲しいのは、ファイル名の先頭にあるその「%」をキャッチし、それをphpファイルにリダイレクトして、クエリ文字列に解析し、301リダイレクトすることです。

自分が何をしているのかを知っていれば、実はとても簡単なことだと思います。私のphpファイルがpercent_fix.phpと呼ばれると仮定しましょう

(私はphpを書くことができると確信しています、私は.htaccessの書き換え条件とルールの助けが必要です。)

4

4 に答える 4

1

リンクにデフォルトのページを与えるようにしてください。例 index.php

次に、.htaccessに追加します

# for %3f ...
RewriteRule ^/index.php\?(.*)$ /index.php?$1
于 2016-12-15T15:46:27.897 に答える
-1

.htaccessファイルで次のことを試してください。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php$1 [L,NC]
于 2012-11-02T13:54:50.730 に答える
-1

質問に含めたリンクに戻り、そのスレッドの上部にある単純なケースが実際に必要なことを実行していることに気付きました。これが実際に私のために働くものです:

#in .htaccess
RewriteEngine on

# If an encoded "?" is present in the requested URI, and no unencoded "?" is
# present, then externally redirect to replace the encoded "?" character.
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^?\ ]+)\ HTTP/
RewriteCond %1 ^(([^%]*(\%(25)*([^3].|.[^F]))*)*)\%(25)*3F(.*)$ [NC]
RewriteRule ^. http://www.example.com/percent_fix.php?%7 [NE,R=301,L]

次に、percent_fix.php で

<?php
if($_SERVER['QUERY_STRING'])
  {
    $new_query=urldecode($_SERVER['QUERY_STRING']);
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.example.com/?'.$new_query);
    die();
  }
else
  {
    header('HTTP/1.x 404 Not Found');
    //readfile("http://www.example.com/?page=404_error");
    die();
  }
?>
于 2012-11-02T17:01:34.530 に答える