Alias

Aliasは、指定のURLを実際のファイルパスにマップするディレクティブ。

mod_alias - Apache HTTP サーバ バージョン 2.4

これまでも、"/htmltest"なら"/var/www/htmltest"にマップしていたけど、本来は、"/"なら"/var/www/html"の下なので、"/htmltest"なら"/var/www/html/htmltest"となるはずだが、Aliasによって、違う場所"/var/www/htmltest"にマップできるわけである。

さて、これまでDocumentRootの下でこういうことをしてきたけど、全く違う場所にマップできるかというと、それも可能。
ただし、ちょっとハマったので注意。

最初は、

Alias /htmltest /var/www/htmltest/
<Directory "/var/www/htmltest/">
    Order deny,allow
    Deny from all
    Allow from localhost
</Directory>

<Directory "/var/www/htmltest/sub_dir1">
    Order allow,deny
    Allow from all
    Deny from localhost
</Directory>

Alias /www2 /var/www2/html
<Directory "/var/www2/html">
    Order allow,deny
    Allow from all
</Directory>

/varの下にwww2というディレクトリを作り、これまでのAliasと同様にこのように定義した。
ところが、これだと403のForbeddenになってしまう。
ディレクトリやindex.htmlのパーミッション、オーナー、グループなど確認したが、どうしても解決できない。

次に、

Alias /home /home/bg1/www
<Directory "/home/bg1/www">
    Require all granted
</Directory>

ホームディレクトリを公開する方法があったので、これも試したが同様に403のForbedden。

Alias で別 DocumentRoot を作り CGI, SSI, html を動かす

ただ、どうもApache2.4では、Allow、Denyを使う方法ではなく、Requireを使う方法じゃないと、ダメだというのはわかった。

Apache - apacheでDocumentRoot以外のアクセス方法について|teratail

結論として、/usr/localの下にディレクトリを作り、そこへのAliasとRequire all grantedを<IfModule alias_module>タグの中で定義すると、うまくいった。

[root@localhost conf]# cd /usr/local/www/
[root@localhost www]# ls
index.html
[root@localhost www]# ls -al
合計 12
drwxrwxr-x.  2 apache apache 4096  3月 17 16:41 .
drwxr-xr-x. 13 root   root   4096  3月 17 16:39 ..
-rwxrwxr-x.  1 apache apache   96  3月 17 16:41 index.html
[root@localhost www]# cd ..
[root@localhost local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src  www
[root@localhost local]# ls -al
合計 52
drwxr-xr-x. 13 root   root   4096  3月 17 16:39 .
drwxr-xr-x. 12 root   root   4096 10月 24 08:12 ..
drwxr-xr-x.  2 root   root   4096  7月 25  2019 bin
drwxr-xr-x.  2 root   root   4096  7月 25  2019 etc
drwxr-xr-x.  2 root   root   4096  7月 25  2019 games
drwxr-xr-x.  2 root   root   4096  7月 25  2019 include
drwxr-xr-x.  2 root   root   4096  7月 25  2019 lib
drwxr-xr-x.  2 root   root   4096  7月 25  2019 lib64
drwxr-xr-x.  2 root   root   4096  7月 25  2019 libexec
drwxr-xr-x.  2 root   root   4096  7月 25  2019 sbin
drwxr-xr-x.  5 root   root   4096 10月 24 08:12 share
drwxr-xr-x.  2 root   root   4096  7月 25  2019 src
drwxrwxr-x.  2 apache apache 4096  3月 17 16:41 www
[root@localhost local]#

一応、apacheオーナーとグループにしたほうがいいらしいのでそうしてる。
パーミッションも775だけど、これもどこまで締めたり開けたりするかはわからない。
とにかく/usr/localにwwwフォルダを置いて、index.htmlは、

<html>
  <head>
    <title>UserLocal</title>
  </head>
  <body>
    UserLocal
  </body>
</html>

UserLocal。
httpd.confは、

<IfModule alias_module>
    #
    # Redirect: Allows you to tell clients about documents that used to
    # exist in your server's namespace, but do not anymore. The client
    # will make a new request for the document at its new location.
    # Example:
    # Redirect permanent /foo http://www.example.com/bar

    #
    # Alias: Maps web paths into filesystem paths and is used to
    # access content that does not live under the DocumentRoot.
    # Example:
    # Alias /webpath /full/filesystem/path
    #
    # If you include a trailing / on /webpath then the server will
    # require it to be present in the URL.  You will also likely
    # need to provide a <Directory> section to allow access to
    # the filesystem path.

    Alias /local "/usr/local/www"
    <Directory "/usr/local/www">
        Require all granted
    </Directory>

    #
    # ScriptAlias: This controls which directories contain server scripts.
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the target directory are treated as applications and
    # run by the server when requested rather than as documents sent to the
    # client.  The same rules about trailing "/" apply to ScriptAlias
    # directives as to Alias.
    #
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>

これまでIfModuleの中で定義してなかったけど、さらっとここに書けと書いてあったので。
外に書いた場合に上手くいくかはわかない。
これで、

アクセス出来た
アクセス出来た

/localで/usr/local/wwwの下にアクセス出来た。