.htaccess書き換えルールをデバッグするためのヒント


272

多くの投稿者は、.htaccessファイル内のRewriteRuleおよびRewriteCondステートメントのデバッグに問題があります。これらのほとんどは共有ホスティングサービスを使用しているため、ルートサーバー構成にアクセスできません。多くの回答者が示唆するように、.htaccessファイルの書き換えを回避できず、RewriteLogLevelを有効にすることもできません。また、.htaccess固有の落とし穴や制約については十分にカバーされていません。ローカルテストLAMPスタックの設定には、ほとんどの学習曲線が必要です。

ここに私のQは、どのように我々は、彼らがいることをお勧めしているので、デバッグ自分のルールを自分自身。以下にいくつかの提案をします。他の提案をいただければ幸いです。

  1. mod_rewriteエンジンが.htaccessファイルを循環することを理解してください。エンジンはこのループを実行します:

    do
      execute server and vhost rewrites (in the Apache Virtual Host Config)
      find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled
      if found(.htaccess)
         execute .htaccess rewrites (in the user's directory)
    while rewrite occurred
    

    そのため、ルールは繰り返し実行され、URIパスを変更すると、他の.htaccessファイルが存在する場合、そのファイルが実行される可能性があります。したがって、必要に応じて、RewriteCondルールの起動を停止するために追加でこのループを終了してください。また、.htaccess明示的にマルチレベルのルールセットを使用する意図がない限り、下位レベルの書き換えルールセットを削除します。

  2. 各Regexpの構文が正しいことを確認するには、一連のテストパターンに対してテストを行い、それが有効な構文であり、十分な範囲のテストURIで意図したとおりに機能することを確認します。詳細については、以下の回答を参照してください。

  3. テストディレクトリにルールを段階的に構築します。.htaccessパス機能で最深部のファイルを実行する」を利用して、メインのルールを台無しにしてサイトの動作を停止することなく、個別のテストディレクトリ(ツリー)をセットアップし、ここでルールセットをデバッグできます。これは失敗を個別のルールにローカライズする唯一の方法であるため、一度に1つずつ追加する必要があります。

  4. ダミースクリプトスタブを使用して、サーバーと環境変数をダンプします。(リスト2を参照)たとえば、アプリでこれを使用している場合は、blog/index.phpこれをにコピーtest/blog/index.phpして、testサブディレクトリーでブログのルールをテストするために使用できます。環境変数を使用して、書き換えエンジンが置換文字列を正しく解釈することを確認することもできます。例:

    RewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
    

    phpinfoダンプでこれらのREDIRECT_ *変数を探します。ところで、私はこれを使用し、自分のサイトで%{ENV:DOCUMENT_ROOT_REAL}代わりに使用する必要があることを発見しました。リダイレクタループの場合、 REDIRECT_REDIRECT_ *変数は前のパスをリストします。等..

  5. ブラウザが誤った301リダイレクトをキャッシュすることで噛まれないようにしてください以下の回答を参照してください。これについては、Ulrich Palhaに感謝します。

  6. 書き換えエンジンは内カスケード接続ルールに敏感らしい.htaccess(ここである、コンテキストRewriteRuleI内部サブ要求にバグが見つかりましたように、置換をもたらし、これはさらにルールにも下がる)(1) 、及び誤ったPATH_INFOをしばしば可能な処理[NS]、[L]、および[PT]フラグを使用して防止する。

コメントや提案はありますか?

リスト1-phpinfo

<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);

10
これらは良いです...おそらく、質問から回答に移動する必要があります。
w00t

@ w00t、他の回答でリンクで参照したいので、あなたの提案に従って正規表現チェッカーを分割しました。
TerryE

3
ドキュメントから最初の提案に制御フロー図を追加することができます。IMOは、疑似コードや説明よりもはるかに理解しやすく、これがmod-rewriteブードゥーの最も暗い部分です。
2012

6番は大変なことです。標準のapache構成ファイルと.htaccessファイルで異なる動作をする書き換えルールは、多くの人を捕らえる必要があります。
Iain Collins

これらのヒントに追加する価値があるかもしれないもの:私は、リダイレクトとリライトではなく、問題のデバッグにしばらく時間を費やしました。「/ comment /」が必要なときに「/ comment」に書き直してもらいました。「/ comment」への書き換えで、サーバーは「/ comment /」へのリダイレクトを行っていました。Apacheに慣れている人にとっては明らかな振る舞いですが、私のような初心者にとってはおそらくそれほどではありません。
Chris

回答:


132

共有ホスティング上のユーザーのデバッグを容易にすることができるテストルールに関するいくつかの追加のヒントを次に示します。

1.偽のユーザーエージェントを使用する

新しいルールをテストするときfakeは、リクエストに使用するユーザーエージェントでのみ実行する条件を追加します。これにより、サイトの他のユーザーに影響を与えることはありません。

例えば

#protect with a fake user agent
RewriteCond %{HTTP_USER_AGENT}  ^my-fake-user-agent$
#Here is the actual rule I am testing
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteRule ^ http://www.domain.com%{REQUEST_URI} [L,R=302] 

Firefoxを使用している場合は、ユーザーエージェントスイッチャーを使用して偽のユーザーエージェント文字列を作成し、テストできます。

2.テストが完了するまで、301を使用しないでください

人々がまだルールをテストしていて、301を使用している投稿をたくさん見ました。しないでください

サイトで提案1を使用していない場合、あなただけでなく、その時点でサイトにアクセスしているすべてのユーザーが301の影響を受けます。

それらは永続的であり、ブラウザによって積極的にキャッシュされることに注意してください。確信があるまで、代わりに302を使用してから、301に変更してください。

3. 301はブラウザに積極的にキャッシュされることに注意してください

ルールが機能せず、正しいと思われ、提案1と2を使用していない場合は、ブラウザーのキャッシュをクリアした後、またはプライベートブラウジング中に再テストします。

4. HTTPキャプチャツールを使用する

FiddlerなどのHTTPキャプチャツールを使用して、ブラウザとサーバー間の実際のHTTPトラフィックを確認します。

他の人がsite does not look rightあなたのことを言っているかもしれませんが、代わりにあなたはそれを見て報告することができall of the images, css and js are returning 404 errors、問題をすばやく絞り込みます。

他の人があなたを報告する一方でstarted at URL A and ended at URL C、あなたは彼らがで始まったことを見ることができますURL A, were 302 redirected to URL B and 301 redirected to URL C。URL Cが最終的な目標であったとしても、これはSEOにとって悪いことであり、修正する必要があることがわかります。

サーバー側で設定されたキャッシュヘッダーを確認し、リクエストを再生し、リクエストヘッダーを変更してテストすることができます....



9
ウルリッヒ、この情報をありがとう。私がリストに入れることを考えていなかったいくつかの側面を取り上げました。301デバッグの問題では、「プライベートブラウジング」(別名「ポルノモード」)でChromeを使用しています。ウィンドウを閉じると、この状態情報がダンプされるためです。これを重要なポイントとして「受け入れる」ことを気にしないでください。単一のベストアンサーではありません。再度、感謝します。:)
TerryE

1
それを明確にする(あなたのコードでそれを持っているが、それを見つけていなかった)が、必ずあなたが必要な302ない301リダイレクトを使用している作るために[L,R=302]
icc97

6
デフォルトを指定する[L, R=302]だけで明示的に指定する必要はありません[L,R]302
Rahil Wazir

2
@goodeye、「Chrome>設定>一般> DevToolsが開いている間はキャッシュを無効にする」チェックボックスも確認してください。
johnsnails 2016年

83

オンラインの.htaccess書き換えテスト

この RegExのGooglingヘルプが見つかりました.htaccess。小さな変更を加えるたびに新しいファイルをアップロードする必要がなく、時間を大幅に節約できました。

サイトから:

htaccessテスター

htaccess書き換えルールをテストするには、ルールを適用するURLを入力し、htaccessのコンテンツを大きな入力エリアに配置して、[今すぐチェック]ボタンをクリックします。


6
問題をデバッグする最も直接的な方法を見つけたこのツールへのポインタをありがとう。
BobHy 2017

ウェブスペースへのsshアクセス権がある場合、別のオプションは、サーバー上のエディターを介して.htaccessを直接変更することです。
sjas 2017

サイト証明書で問題が発生しているssl警告を無視する必要があります。しかし、サイトはまだそこにあります。これが最善かつ最も簡単なソリューションです。それは何が悪いのかについての信じられないほどの洞察を与え、問題を迅速に修正することになります。
toddmo

このツールをご紹介いただきありがとうございます。これは役に立ちます。Apachehtaccess自体のデバッグは非常に難しい場合があります。ありがとう。大感謝
Benyamin Limanto

参照されているリンクはバグがあり、常に正確な出力が得られるとは限りません。確実に確認するために、実際のApacheを確認してください。
パート

13

.htaccessファイルでは、一致するのは相対URLであることを忘れないでください。

.htaccessファイルでは、次のRewriteRuleは決して一致しません。

RewriteRule ^/(.*)     /something/$s

4
はい、書き換えルールに入力された文字列は相対的であるため、先頭の文字列は削除されます/が、この削除はRewrite Condコマンドで組み立てられた一致文字列では発生しません。
TerryE

8

各Regexpの構文が正しいことを確認してください

一連のテストパターンに対してテストを行い、それが有効な構文であり、十分な範囲のテストURIで意図したとおりに機能することを確認します。

参照regexpCheck.phpあなたはこれを行うヘルプをあなたのサイトにプライベート/ testディレクトリに追加できる単純なスクリプトについては、以下の。私はかなりではなく、この簡潔さを保ちました。これをregexpCheck.phpテストディレクトリのファイルに貼り付けて、ウェブサイトで使用します。これは、正規表現を作成し、テストケースのリストに対してテストするときに役立ちます。ここではPHP PCREエンジンを使用していますが、Apacheのソースを調べたところ、これは基本的にApacheで使用されているものと同じです。テンプレートを提供し、正規表現スキルを構築するのに役立つ多くのハウツーとチュートリアルがあります。

リスト1-regexpCheck.php

<html><head><title>Regexp checker</title></head><body>
<?php 
    $a_pattern= isset($_POST['pattern']) ? $_POST['pattern'] : "";
    $a_ntests = isset($_POST['ntests']) ? $_POST['ntests'] : 1;
    $a_test   = isset($_POST['test']) ? $_POST['test'] : array();
    
    $res = array(); $maxM=-1; 
    foreach($a_test as $t ){
        $rtn = @preg_match('#'.$a_pattern.'#',$t,$m);
        if($rtn == 1){
            $maxM=max($maxM,count($m));
            $res[]=array_merge( array('matched'),  $m );
        } else {
            $res[]=array(($rtn === FALSE ? 'invalid' : 'non-matched'));
        }
    } 
?> <p>&nbsp; </p>
<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'];?>">
    <label for="pl">Regexp Pattern: </label>
    <input id="p" name="pattern" size="50" value="<?php echo htmlentities($a_pattern,ENT_QUOTES,"UTF-8");;?>" />
    <label for="n">&nbsp; &nbsp; Number of test vectors: </label>
    <input id="n" name="ntests"  size="3" value="<?php echo $a_ntests;?>"/>
    <input type="submit" name="go" value="OK"/><hr/><p>&nbsp;</p>
    <table><thead><tr><td><b>Test Vector</b></td><td>&nbsp; &nbsp; <b>Result</b></td>
<?php 
    for ( $i=0; $i<$maxM; $i++ ) echo "<td>&nbsp; &nbsp; <b>\$$i</b></td>";
    echo "</tr><tbody>\n";
    for( $i=0; $i<$a_ntests; $i++ ){
        echo '<tr><td>&nbsp;<input name="test[]" value="', 
            htmlentities($a_test[$i], ENT_QUOTES,"UTF-8"),'" /></td>';
        foreach ($res[$i] as $v) { echo '<td>&nbsp; &nbsp; ',htmlentities($v, ENT_QUOTES,"UTF-8"),'&nbsp; &nbsp; </td>';}
        echo "</tr>\n";
    }
?> </table></form></body></html>

1
クイックノート:import_request_variablesPHP 5.3で廃止され、5.4で削除されました。 extract($_GET)と組み合わせるとextract($_POST)同じ機能を実行できますが、すべての変数の名前からプレフィックスを削除する必要があります。出典:php.net/manual/en/function.import-request-variables.php
Jeff Lambert

@watcher、ありがとう。1年前にローカルバージョンを5.4互換に更新しましたが、この投稿を変更するのを忘れていました。これで完了です。
TerryE 2013年

ああ、編集した後でも、コードをコピーしただけでは良い結果が得られません...しかし、正規表現のフィドラーを使用すると、ツールが古くなっていると思います。これらのクールなツールを確認してください:regex101.comまたはrefiddle.comまたはregexr.com
hexereiソフトウェア

@hexereisoftware、この投稿は3年前なので、現在使用しているPHPのバージョンとApacheのバージョンによっては微妙な問題が発生する可能性があります。ただし、微妙な違いがあるregexpには多くのバリアントがあります。先ほど述べたように、ApacheコードはPHPエンジンと非常によく似たPCREエンジンを使用しています。.Netなどのotheバリアントとの相違点が何かわからないので、オンラインリソースを使用するという提案は適切ですが、ApacheまたはPHP構文を明示的にサポートするものを使用します。:-)
TerryE 2015

Perlは最も近いでしょうが、phpは同じ構文を使用します
hexereiソフトウェア

7

ドル記号ではなく、変数の前にパーセント記号を使用してください。

それは%{HTTP_HOST}、ではありません ${HTTP_HOST}。error_logには何もありません。内部サーバーエラーはありません。正規表現はまだ正しいので、ルールは一致しません。これは、django / genshiテンプレートを頻繁に${}使用し、マッスルメモリの変数置換を必要とする場合、非常に恐ろしいです。


1
はい、$置換変数は最後のRewriteRuleパターンに関連し、変数は最後のRewriteCondパターンおよび %{env:XXX}などのスペシャルに関連しています
TerryE

7

私が浪費した数時間のうちの1つ:

これらのヒントをすべて適用しても、サーバーエラーログにアクセスできないために500エラーしか発生しない場合、問題は.htaccessではなく、リダイレクト先のファイルにある可能性があります。

.htaccess-problemを修正した後、単にいくつかの権限について忘れていたにもかかわらず、それを修正するためにさらに2時間費やしました。


私は個人用サイトに共有アクセスホスティングウェブサービスを使用していますが、PHP / Apacheの設定、ホームディレクトリなどの点でおおよそミラーリングするテストVMを設定しています。 admin困難な.htaccess問題を診断するために、ログの書き換えを有効にすることができます。
TerryE、2015

6

環境変数を設定し、ヘッダーを使用してそれらを受け取ります。

OPで言及されているように、RewriteRule行を使用して新しい環境変数を作成できます。

RewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]

しかし、サーバー側のスクリプトを機能させることができない場合、どうすればこの環境変数を読み取ることができますか?1つの解決策は、ヘッダーを設定することです。

Header set TEST_FOOBAR "%{REDIRECT_TEST0}e"

%{NAME}e、環境変数の指定子を含む形式指定子を受け入れます(小文字のeを忘れないでください)。場合によっては、REDIRECT_プレフィックスを追加する必要がありますが、プレフィックスが追加されたときと追加されなかったときは、うまくいきませんでした。


いつREDIRECT_プレフィックスを使用するか使用しないかについて、さらに洞察を得ましたか?また、他の(htaccess)コンテキストでの接頭辞に関する用語も見ていますが、その意味が明確にされていません。特定のコマンド(他のコマンドではなく)を使用する場合、変数にプレフィックスを付けて名前を付けるか、プレフィックスを名前付き変数に追加する必要があるということですか?あなたの例は、変数の定義と変数の使用法の両方を示す最初の例であるため、これから私は後者を考える傾向があります!ドキュメントはほとんど役に立ちませんでした-彼らは私たちが多くを知っていて、参照/リンクが少なすぎると仮定しています。
SherylHohman

5

リダイレクトを作成する場合は、curlを使用してテストし、ブラウザーのキャッシュの問題を回避します。-Iを使用して、httpヘッダーのみをフェッチします。すべてのリダイレクトを追跡するには、-Lを使用します。


3

私のmod_rewriteの問題をデバッグしようとしたときにこの質問を見つけました、そしてそれは間違いなくいくつかの役立つアドバイスを持っています。しかし結局、最も重要なことは、正規表現の構文が正しいことを確認することです。私自身のRE構文に問題があるため、regexpCheck.phpスクリプトのインストールは実行可能なオプションではありませんでした。

しかし、ApacheはPerl互換の正規表現(PCRE)を使用しているため、PCREの作成に役立つツールが役立つはずです。私は過去にJavaとJavascript REでRegexPlanetのツールを使用したことがありますが、Perlもサポートしていることがわかりました。

正規表現と1つ以上のサンプルURLを入力するだけで、正規表現が一致するか(「〜=」列の「1」)、該当する場合は一致するグループ(「分割」の数字)がわかります列は、各URLについてApacheが期待する数に対応します(例:$ 1、$ 2など)。彼らはPCREサポートは「ベータ版」であると主張していますが、それは私が構文問題を解決するために必要なものでした。

http://www.regexplanet.com/advanced/perl/index.html

既存の回答にコメントを追加しただけですが、私の評判はまだそのレベルではありません。これが誰かを助けることを願っています。


素晴らしいツールですが、ひどいフォームです... regex101.comまたはrefiddle.comまたはregexr.com
hexereiソフトウェア

3

4.については、すべての書き換えが完了した後も、「ダミースクリプトスタブ」が実際にターゲットURLであることを確認する必要があります。そうしないと、何も表示されません。

同様の/関連するトリック(この質問を参照)は、次のような一時的なルールを挿入することです。

RewriteRule (.*) /show.php?url=$1 [END]

パラメータをshow.php表示するだけの非常に単純なスクリプトはどこにありますか$_GET(必要に応じて、環境変数も表示できます)。

これは、デバッガーのブレークポイントのように、ルールセットに挿入した時点で書き換えを停止します。

Apache <2.3.9を使用している場合[L]は、[END]ではなくを使用する必要があり、追加する必要がある場合があります。

RewriteRule ^show.php$ - [L]

あなたのルールセットの最上部に、場合 URLは/show.php、それ自体が書き換えられています。


3

私が観察したいくつかの間違いは書くときに起こります .htaccess

^(.*)$複数のルールで繰り返しを使用すると^(.*)$、単一のヒットですべてのURLに一致するため、他のルールはほとんどの場合無力になります。

したがって、このURL sapmle/urlにルールを使用している場合は、このURLも使用されsapmle/url/stringます。


[L] フラグを使用して、ルールが処理を完了したことを確認する必要があります。


知っておくべきこと:

%nと$ nの違い

%n中にマッチしている%{RewriteCond}部分と$nで一致している%{RewriteRule}部分。

RewriteBaseの動作

RewriteBaseディレクティブは、相対パスを置換するディレクトリごと(htaccess)のRewriteRuleディレクティブに使用されるURLプレフィックスを指定します。

このディレクティブは、次の条件のいずれかに該当しない限り、ディレクトリごとの(htaccess)コンテキストで置換に相対パスを使用する場合に必要です。

元のリクエストと置換は、DocumentRootの下にあります(エイリアスなどの他の方法では到達できません)。RewriteRuleが含まれているディレクトリへのファイルシステムパスの後に接尾辞を付けた相対パスも、サーバー上のURLパスとして有効です(これはまれです)。Apache HTTP Server 2.4.16以降では、要求がAliasまたはmod_userdirを介してマップされる場合、このディレクティブは省略される場合があります。


2

.htacesssに複数行のルールを記述することを計画している場合
は、それらのホットフィックスメソッドの1つを試してデバッグすることさえ考えないでください。

LOGからのフィードバックなしに、複数のルールを設定して、あきらめるだけの日々を過ごしました。
私は自分のPCにApacheをインストールし、サイト全体をHDDにコピーし、ログを使用してルールセット全体を非常に高速に分類しました。
次に、機能していた古いルールを確認しました。彼らが望んでいたことを実際に行っていないのを見た。時差爆弾。アドレスは少し異なります。

書き換えルールには非常に多くの落とし穴がありますが、それはまったく論理的なものではありません。
Apacheを10分で起動して実行できます。10MBの優れたライセンスで、インストールしなくても* NIX / WIN / MACに対応しています。
また、サーバーのヘッダー行を確認し、古いバージョンの場合は同じバージョンのApacheをアーカイブから取得します。私のOPは2.0のままです。多くのものがサポートされていません。


papo、私は専用サーバー、ISPでホストされたVPS、プライベートVMを開発構造内で実行しましたが、フルマネージドを使用する方が便利で費用対効果が高いという理由で、パブリックドメインと電子メールには引き続き共有ホスティングサービスを使用していますこれらのサービス。このハウツーは本当に共有サービスのユーザーを対象としています。共有サービスを完全にミラーリングするようにプライベートVMを構成することは困難です。はい。テストVMを使用できる場合は役立ちますが、共有サービスでこれらの「トリック」を時々使用しています。
TerryE、2017年

1
ルールをデバッグするための代替提案としてあなたのAが組み立てられていたなら、私はこれに同意しますmod_rewriteが、「それについて考えさえしない」という冒頭は、htaccessファイルがなぜなのかを理解するのに苦労している基本的な共有サービスユーザーにとっては単に悪いアドバイスです。t彼らがすべきことを彼らがするように働く。
TerryE 2017年

素敵なアドバイスのコレクションをまとめるあなたの仕事が役に立たなかったように思えます。欲しくなかった。私を信じて、私はこのスレッドが提供した多くのアドバイスを読んでそれに従いました。しかし、私のルールは徐々に複雑になり、結局、Apacheサーバーをインストールしてデバッグを実行するというトラブルを回避したいだけで、多くの時間を無駄にしてしまいました。それ以上に、実際に何が起こっているのか、ログでは分からなかったので、何も学びませんでした。そして、多くのことが起こっています。この経験を共有することも貴重だと思います。
papo 2017年

2番目の部分にはIFがあります。私のテキストは、「考えないでください」で始まったことはありません。特にこれに不慣れで理解に苦労している人たちのために。ここでのアドバイスは、私のように、必要なのは確かな正規表現だけであると誤解するかもしれません、あなたのポイントのようにそれはそれほど単純ではありません6)PATH_INFOは私に多くの問題を引き起こし、あなたが言うようにバグではありませんが、機能です。再度追加したくない場合は、[DPI]を使用してください。ただし、ログを見ると、そこに追加されていることがわかります。そのため、複数の行があり、ログを使用した方がよい
papo

1
申し訳ありませんが、@ papoですが、-1票を投じた理由は、この「それについてさえ考えてはいけない」というのは悪いアドバイスだと思うからです、IMO。「特定の複雑さを超えると、ローカルのApacheサービスをインストールして.htaccessファイルをデバッグする方が簡単になる」ということがポイントである場合、これはよりバランスが取れています。はい、ローカルのApacheサービスを設定するのはかなり簡単ですが、サービスプロバイダーの共有ホスティングサービスを反映させることは複雑であり、Wordpressのワンクリック設定を使用したばかりの多くのユーザーのスキルレベルを超えて、言う、と彼らの.htaccessファイルに問題があります。
TerryE 2017年

1

私は、ここでは多分明白な詳細を、これを残しておきますが、私は時間のために私の頭を叩いてしまった:使用して注意してください%{REQUEST_URI}どのようなので@KristバンBesienは彼の答えに言うことは右、完全ではなくREQUEST_URI文字列のために、本の出し入れ理由TestStringはで始まり/ます。だから注意してください:

RewriteCond %{REQUEST_URI} ^/assets/$  
                            ^
                            | check this pesky fella right here if missing

0

(Doinのアイデアに似ています)何が一致しているかを示すために、このコードを使用します

$keys = array_keys($_GET);
foreach($keys as $i=>$key){
    echo "$i => $key <br>";
}

サーバールートのr.phpに保存してから、.htaccessでいくつかのテストを実行します
。たとえば、言語のプレフィックスで始まらないURLに一致させたい

RewriteRule ^(?!(en|de)/)(.*)$ /r.php?$1&$2 [L] #$1&$2&...
RewriteRule ^(.*)$ /r.php?nomatch [L] #report nomatch and exit

1
O / Pのポイント4で述べたようにphpinfo()スタブを使用するだけでも、基本的に同じことを行います。探すQUERY_STRING
TerryE 2013年

0

@JCastellで指摘されているように、オンラインテスターは、.htaccessファイルに対して個々のリダイレクトをテストするのに優れています。ただし、より興味深いのは、jsonオブジェクトを使用してURLのリストをバッチテストするために使用できるAPIです。ただし、より便利にするために、curljqを使用してURLのリストを送信し、htaccessファイルで一致する行番号とルールを含むCSV形式の出力にjson応答を解析する小さなbashスクリプトファイルを作成しましたリダイレクトされたURLとともに、スプレッドシート内のURLのリストを比較して、機能していないルールをすばやく特定するのに非常に便利です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.