#
ドキュメント

Document

自分のための備忘録です。

.htaccess

ref. https://httpd.apache.org/docs/current/mod/mod_rewrite.html

RedirectとRewrite

RedirectとRewrite : WordPress

Rewrite

mod_rewriteが有効な場合にのみ処理をする。

<IfModule mod_rewrite.c>
    RewriteEngine on
    # 処理
</IfModule>

Ref

ディレクティブ

  • RewriteEngine
  • RewriteCond:「文字列が正規表現に合致したときに次の行のRewriteRuleを実行」(できる Apache Webサーバー p276)
    • 用法: RewriteCond 文字列 正規表現 (できる Apache Webサーバー p276)
  • RewriteRule:「mod_rewriteの書き換えルールを設定する」(できる Apache webサーバ p276)
    • 用法: RewriteRule 正規表現 書き換え後 [フラグ] (できる Apache Webサーバー p276)

例)http -> https

blogディレクトリを除いてSSL化。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !on
    RewriteCond %{REQUEST_URI} !(^/blog/)
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

例)WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

.htaccess上では、リダイレクト元のパターン指定は、ホスト名直後のスラッシュを含まないURLパス、逆に、リダイレクト先はホスト名直後のスラッシュを含むパスとなります。これはApache の仕様で定義されていますが、混乱しやすいため、注意が必要です。
参考:RewriteRule directive: What is matched?

-- .htaccess でのリダイレクト(転送)設定の書き方

Redirect

特定ページをRedirect

通常

301リダイレクトの記述

Redirect permanent /sample/ http://wwww.example.com/index.php

302リダイレクトの記述

Redirect 302 /sample/ http://wwww.example.com/index.php

正規表現

301リダイレクトの記述

RedirectMatch permanent ^/index\.html$ https://example.com/example/

302リダイレクトの記述

RedirectMatch 302 ^/index\.html$ https://example.com/example/

オリジン間リソース共有 (CORS)

Header set Access-Control-Allow-Origin "*"

Filesディレクティブ

<Files ~ "index.php">
    order deny,allow
    allow from all
</Files>

FilesMatchディレクティブ

<FilesMatch "^composer|^COPYING|^\.env|^\.maintenance|^Procfile|^app\.json|^gulpfile\.js|^package\.json|^package-lock\.json|web\.config|^Dockerfile|\.(ini|lock|dist|git|sh|bak|swp|env|twig|yml|yaml|dockerignore)$">
    order allow,deny
    deny from all
</FilesMatch>

ref.

order allow deny

https://qiita.com/Shi-nakaya/items/8a9b5c9302cc410251f6