0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Apache]拡張子なしでアクセスする[mod_rewrite]

Last updated at Posted at 2024-12-31

http://localhost/health のようにURLに .html のような拡張子を付けないでアクセスできるようにしたいと思ったので、そのときに作業したことをメモとしてのこしておきます。

準備

今回はapacheの環境をdockerを使って用意しました。なのでまずはapacheのdockerコンテナを立ち上げます。

docker run -d httpd:2.4.62

コンテナが立ち上がったら、httpd.confをdockerコンテナからコピーします。

docker cp $(docker ps | awk '$2=="httpd:2.4.62" {print $1}'):/usr/local/apache2/conf/httpd.conf $PWD

設定ファイルをコピーしてきたらコンテナを停止しておきます。

  docker stop $(docker ps | awk '$2=="httpd:2.4.62" {print $1}')

httpd.confを編集

拡張子なしでアクセスできるようにするためリライト条件を設定します。

httpd.conf
<Directory "/usr/local/apache2/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride None
    
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} /[^./]+$
    RewriteRule (.*) $1.html

RewriteRuleを使用するため、mod_rewriteモジュールを有効化します。

httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so

ポートを8080に変更します。ここは変更しなくても問題ないです。

httpd.conf
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 8080

コンテナイメージを作成

設定ファイルの編集が終わったら、次に動作確認用として適当なファイルを作成します。

health.html
<html><body><h1>ok</h1></body></html>

新しい設定ファイルと動作確認用のファイルを含んだDockerfileを作成します。

Dockerfile
FROM httpd:2.4.62

COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./health.html /usr/local/apache2/htdocs/health.html

作成したDockerfileを使用してビルドします。

docker build -t custom-httpd .

ビルドしたイメージからコンテナを起動。

docker run -d -p 8080:8080 custom-httpd

動作確認

最後に動作確認をします。確認したいURLに拡張子を省略してアクセスして404がかえってこなければ成功です。

$ curl -v http://localhost:8080/health
*   Trying 127.0.0.1:8080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /health HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Tue, 31 Dec 2024 02:19:52 GMT
< Server: Apache/2.4.62 (Unix)
< Last-Modified: Tue, 31 Dec 2024 00:57:54 GMT
< ETag: "26-62a866b501702"
< Accept-Ranges: bytes
< Content-Length: 38
< Content-Type: text/html
<
<html><body><h1>ok</h1></body></html>
* Connection #0 to host localhost left intact
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?