タグ付けされた質問 「mod-rewrite」

Apache Webサーバー用のURL書き換えモジュール

5
Apacheでのリダイレクト、URLの変更、HTTPからHTTPSへのリダイレクト-Mod_Rewriteルールについて知りたいと思っていたが、尋ねるのが怖かったすべて
これは、Apacheのmod_rewriteに関する標準的な質問です。 リクエストURLを変更するか、最初にリクエストしたURLとは異なるURLにユーザーをリダイレクトするには、mod_rewriteを使用します。これには次のようなものが含まれます。 HTTPからHTTPSへの変更(またはその逆) 存在しないページへのリクエストを新しい置換に変更する。 URL形式の変更(?id = 3433から/ id / 3433など) 月と太陽の下で可能なものに基づいて、ブラウザ、リファラーに基づいて異なるページを表示します。 URLをいじりたいもの Mod_Rewriteルールについて知りたいと思っていたものの、尋ねるのが怖かったものすべて! mod_rewriteルールの作成のエキスパートになるにはどうすればよいですか? mod_rewriteルールの基本的な形式と構造は何ですか? どの形式/フレーバーの正規表現をしっかりと把握する必要がありますか? 書き換えルールを記述する際の最も一般的な間違い/落とし穴は何ですか? mod_rewriteルールをテストおよび検証するための良い方法は何ですか? mod_rewriteルールのSEOまたはパフォーマンスへの影響はありますか? mod_rewriteがジョブに適したツールのように見えるかもしれませんが、そうではない一般的な状況はありますか? 一般的な例は何ですか? ルールをテストする場所 htaccessのテスターのウェブサイトは、あなたのルールで遊んで、それらをテストするには絶好の場所です。デバッグ出力も表示されるため、一致したものと一致しなかったものを確認できます。

4
Apache VirtualHost内でURLをリダイレクトしますか?
Apacheを備えた専用サーバーがあり、その上にいくつかのVirtualHostをセットアップしました。wwwドメインとwww以外のドメインを処理するように設定しました。 wwwのVH .confファイル: <VirtualHost *> DocumentRoot /var/www/site ServerName www.example.com <Directory "/var/www/site"> allow from all </Directory> </VirtualHost> これで.htaccess: RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ http://example.com/$1 [L,R=301] wwwをwww以外のバージョンにリダイレクトする簡単な方法はありますか?現在、両方のバージョンを同じものに送信してDocumentRoot使用.htaccessしていますが、VirtualHostファイルでそれを実行できる必要があります。

3
nginx構成ファイルをデバッグする最良の方法は?
apacheからnginxに移植しなければならない書き換えルールがたくさんあります。 書き換えルールと「if」条件が意図したとおりに機能しているかどうかを確認できないため、かなり苦痛なプロセスです。 Apacheには、書き換えモジュールのデバッグ機能がありました。nginxで何ができますか?

3
Apache Mod_proxyのURLを除外する方法は?
ロードバランサーとしてmod_proxyモジュールを使用して構成されたフロントエンドとしての2つのApacheサーバーとバックエンドとしての4つのTomcatサーバーがあります。次に、mod_proxyロードバランサーから単一のTomcat URLを除外します。除外する方法やルールはありますか? プロキシバランサーの設定: <Proxy balancer://backend-cluster1> BalancerMember http://10.0.0.1:8080 loadfactor=1 route=test1 retry=10 BalancerMember http://10.0.0.2:8080 loadfactor=1 route=test2 retry=10 </Proxy>

3
疑わしい.htaccessファイル
サーバーフォールトで回答できるため、 この質問はStack Overflowから移行されました。 10年前に移行され ました。 これは私のFTPフォルダーの1つにアップロードされました。私はApacheには慣れていませんが、まだ興味があります-このファイルがコミットしようとしている卑劣な行為の種類を誰かに教えてもらえますか?ありがとう! RewriteEngine On RewriteCond %{HTTP_REFERER} .*google.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*ask.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*yahoo.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*excite.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*altavista.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*msn.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*netscape.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*aol.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*hotbot.*$ [NC,OR] RewriteCond %{HTTP_REFERER} .*goto.*$ [NC,OR] RewriteCond %{HTTP_REFERER} …

8
mod_rewriteが有効になっているかどうかをテストするにはどうすればよいですか?
ubuntu 12.04の新規インストールで、apache2にwordpress用の環境を設定しています。 わかりやすいURLを機能させるために、mod_rewriteを設定しようとしています。私はネットで見つけたいくつかの指示に従い、a2enmodを使用しました。 今。Apacheを再起動した後、モジュールが実際にロードされているかどうかを確認したいと思います。 ロードされたモジュールのリストを取得するために見つけたコマンドは次のとおりです。 apache2 -t -D DUMP_MODULES ただし、これはエラーを返します。 apache2:不正なユーザー名$ {APACHE_RUN_USER} だから、実際にロードされたすべてのモジュールをリストする方法、またはmod_rewriteが有効になっているかどうかを確認するにはどうすればよいですか?

1
Apache mod_rewriteはリダイレクト時にクエリ文字列をダブルエンコードします
クエリ文字列を渡す際のApache mod_rewriteの動作に関する奇妙な問題(おそらくバグ?)に遭遇しました。 再現するために、デフォルトのApache構成でクリーンなUbuntu(oneiric)インストールをセットアップしました。mod_rewriteを有効にし、デフォルトのサイト構成で次を追加しました。 RewriteEngine on RewriteRule ^/(.*)$ /r/$1 [R] テストするには、curlを使用します。 curl -I 'http://[ubuntu-machine]/a/b%20c?a%20b' 関連する出力は次のとおりです。 HTTP/1.1 302 Found Server: Apache/2.2.20 (Ubuntu) Location: http://[ubuntu-machine]/r/a/b%20c?a%2520b ご覧のとおり、クエリ文字列は二重エスケープされていますが、これは間違っています。これを修正する方法はありますか?私たちが試したいくつかのこと: [NE]を追加します。これにより正しいクエリ文字列が得られますが、パスはエスケープされず、新しい問題につながります。 [NE、B]を追加します。これは機能しているように見えますが、パスのとの/間の部分がエスケープされます。ab クエリ文字列を手動でエスケープ解除します。 RewriteCond %{QUERY_STRING} .* RewriteMap unescape int:unescape RewriteRule ^(.*)$ $1?${unescape:%{QUERY_STRING}} ただし、これは、たとえば、クエリ文字列で&エスケープさ&れたan とエスケープされた文字を区別できないことを意味します。 更新: このバグレポートでは、同じ問題について説明しています。最初のコメントは明らかに問題を修正するコミットにリンクしていますが、Pieterが以下で述べているように、実際に修正されているようには見えません。


2
リバースプロキシでのApache URLの書き換え
Karafがホストするアプリケーションの前にApacheをデプロイしています(ApacheとKarafは別々のサーバーにあります)。Apacheをリバースプロキシとして動作させ、URLの一部を非表示にしたいのです。 アプリケーションサーバーからアプリケーションのログインページを直接取得するためのURLはhttp://app-server:8181/jellyfishです。ページはKaraf内で実行されているJettyインスタンスによって提供されます。もちろん、この動作は通常、リバースプロキシサーバーを除くすべてのファイアウォールによってブロックされます。 ファイアウォールをオフにして、このURLにアクセスすると、Jettyはログインページをロードします。ブラウザのアドレスバーが正しく変更されhttp://app-server:8181/jellyfish/login?0、すべてが機能します。 私が望んでいるのは、http://web-server(ルートから)アプリの名前(jellyfish)を抑制して、アプリサーバー上のJettyにマップすることです。たとえば、ブラウザはhttp://web-server/login?0アドレスバーに表示されるように変更され、後続のすべてのURLとコンテンツは、Webサーバーのドメインで、jellyfish乱雑にならずに提供されます。 次の設定(スニペット)を使用して、Apacheを単純なリバースプロキシとして動作させることができます。 ProxyPass /jellyfish http://app-server:8181/jellyfish ProxyPassReverse / http://app-server:8181/ ...ただし、これにはブラウザのURLが含まれている必要がありjellyfish、ルートURL(http://web-server)に移動すると404 Not Foundが返されます。 私はこれを回避するためにフラグのmod_rewrite有無にかかわらず使用しようとして多くの時間を費やしましたが、[P]成功しませんでした。その後、ProxyPassMatchディレクティブを試してみましたが、それもまったく正しいとは思えません。 以下は/etc/apache2/sites-available/、Webサーバーにロードされる現在の構成です。ローカルにホストされている画像ディレクトリがあることに注意してください。また、mod_rewriteプロキシエクスプロイト保護を維持し、mod_security誤検知を引き起こすいくつかのルールを抑制しています。 <VirtualHost *:80> ServerAdmin admin@drummer-server ServerName drummer-server ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /images/ "/var/www/images/" RewriteEngine On RewriteCond %{REQUEST_URI} !^$ RewriteCond %{REQUEST_URI} !^/ RewriteRule .* - [R=400,L] ProxyPass /images ! ProxyPassMatch ^/(.*) http://granny-server:8181/jellyfish/$1 …

3
HTTP OPTIONSリクエストでApacheに「200 OK」を返す
コードを変更せずにクロスドメインHTTPアクセス制御を実装しようとしています。 このブロックで正しいアクセス制御ヘッダーを返すApache(2)サーバーがあります。 Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "POST, GET, OPTIONS" ブラウザがHTTP OPTIONSリクエストを送信したとき(REQUEST_METHOD環境変数に保存されている)、Apacheがコードを実行しないようにする必要があります200 OK。 要求方法がOPTIONSの場合に「200 OK」と応答するようにApacheを構成するにはどうすればよいですか? このmod_rewriteブロックを試しましたが、アクセス制御ヘッダーが失われます。 RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]

4
パラメータの長さが255を超える書き換えられたURLは機能しません
mod_rewriteを使用して、次のようにURLを書き換えています。 http://example.com/1,2,3,4/foo/ .htaccessでこれを行うことにより: RewriteEngine On RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA] 「1,2,3,4」が255文字より長い文字列に変わる場合を除き、Apacheは「403 Forbidden」を返します。 foo.php?id=1,2,3,4非常に長いid文字列であっても、直接アクセスするのに問題はありませんが、これは私にとって選択肢ではありません。 調整すべきApacheやその他の設定はありますか? 更新:RewriteLogLevel 9でRewriteLogをオンにしました。短いID文字列では、ログファイルに複数の行が記録されます。しかし、id文字列が255文字を超える場合、何もログに記録されません(mod_rewriteが実行されていないようです?)。 この質問がおもしろい/役に立つと思ったら、賛成してください。

1
Apacheは条件付きでカスタムHTTPヘッダーから書き換えを実行できますか?
(シンプルなAmazon)ロードバランサーの背後にApacheサーバーがあります。443から443以外の着信トラフィックをリダイレクトします。1つのApache仮想ホストのみを使用することを希望します。したがって、HTTP_X_FORWARDED_PORTヘッダーが443でない場合、それを検出しようとしています。 RewriteCondのドキュメントを確認しましたが、限られたHTTPヘッダーセットでのみ機能します。 基本的に私がやっていることはこれです: <VirtualHost *:80> ServerName www.example.com RewriteEngine On RewriteCond %{HTTP_X_FORWARDED_PORT} !=443 RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] .... </VirtualHost> ただし、RewriteCondはHTTP_X_FORWARDED_PORTを認識しません。 これを達成する他の方法はありますか(1つのVirtualHostで)?(ある種の着信ヘッダーチェック?) ありがとう、ランス

1
mod_rewriteのURL 257文字の最大長は?
私のURLスキームは/foo/var1-var2-var3.../barです 私はこれらのmod_rewriteルールを使用しています: RewriteBase /foo/ RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [PT,L] 文字列「var1-var2 ...」の長さが257文字を超える場合、エラー403 Forbiddenおよび404が返されます。ただし、「var1-var2 ...」文字列の長さが257文字以下で、その後にスラッシュが続く場合、残りのURLの長さは任意の長さになります。この制限をどのように克服しますか?

3
apache2.4 mod_rewriteは特定のエイリアスdirectroy / uriを除外します
私の仮想ホストの1つに次の設定があります。 ...<VirtualHost *:80> ServerName cloud.domain.de ServerAdmin webmaster@domain.de ServerSignature Off Alias "/.well-known/acme-challenge" "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge" <Directory "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge"> Require all granted ForceType 'text/plain' </Directory> <ifmodule mod_rewrite.c> RewriteEngine On RewriteCond %(REQUEST_URI) !/\.well\-known/acme\-challenge/?.* RewriteCond %{HTTPS} off # RewriteRule ^\.well-known/acme-challenge/([A-Za-z0-9-]+)/?$ - [L] RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </ifmodule>... 私が達成したいのは、URLにhttp://cloud.domain.de/.well-known/acme-challenge/アクセスしてもmod_rewriteがURLを書き換えないことです。 私はすでにさまざまな方法を試しましたが、そのうちの1つは上記のコメント化されたRewriteRuleですが、何も機能しないようです。サーバーが毎回httpsに書き換えます。 テスト目的で書き換えを無効にすると、エイリアスURLに問題なくアクセスできます... 特定のURLが書き換えられないようにするにはどうすればよいですか?

4
Cookieを使用してNginxプロキシターゲットを制御していますか?
興味深いApache mod_rewrite設定を使用してリバースプロキシを変換して、代わりにNginxを使用しようとしています(外部の懸念により、ApacheからNginxに移行しているため、この部分を除いてほとんどすべてが正常に機能します)。 私の最初の設定は、HTTP Cookie(アプリケーションによって設定された)を読み取り、その値に応じて、リバースプロキシを異なるバックエンドに転送することでした。それはこのようなものでした: RewriteCond %{HTTP_COOKIE} proxy-target-A RewriteRule ^/original-request/ http://backend-a/some-application [P,QSA] RewriteCond %{HTTP_COOKIE} proxy-target-B RewriteRule ^/original-request http://backend-b/another-application [P,QSA] RewriteRule ^/original-request http://primary-backend/original-application [P,QSA] 私はNginxを使用して同じことを達成しようとしています、そして私の初期設定はこのようなものでした( "proxy_override"はCookieの名前です): location /original-request { if ($cookie_proxy_override = "proxy-target-A") { rewrite . http://backend-a/some-application; break; } if ($cookie_proxy_override = "proxy-target-B") { rewrite . http://backend-b/another-application; break; } proxy_pass http://primary-backend/original-application; } …

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