Debian 10のApache2でmod_rewriteを動作させるのに苦労しています。
a2enmod rewrite
systemctl restart apache2
そしてエラーは発生せず、モジュールは
apachectl -M
...
rewrite_module (shared)
...
私がそれをサイト利用可能な仮想ホストに追加すると
<VirtualHost *:80>
ServerName default.nothing
ServerAlias www.default.nothing
DocumentRoot /var/www/html/public_html/00-default
<Directory "/volume/dev/html/public_html/00-default">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
RewriteEngine on
RewriteRule ^192.168.20.87$ nothing
</Directory>
<IfModule mpm_user_module>
ServerEnvironment apache apache
</IfModule>
</VirtualHost>
URLを書き換えることを期待してhttp://192.168.20.87/page.phpブラウザタブでhttp://nothing/page.phpとして表示します。RewriteRuleに何を入力しても何も起きません。何かやっていることは確かです
答え1
RewriteEngine on RewriteRule ^192.168.20.87$ nothing
何らかの理由で.htaccessで実行すると動作します
http://192.168.20.87/page.php
これは「」で実行してもURLと一致しないので.htaccess
、何か他のことをする?
上記のルールは (<Directory>
コンテナー内で使用される場合) 形式の URL http://192.168.20.87/192.168.20.87
(またはhttp://default.nothing/192.168.20.87
ホスト名が解決される場合は - ) と一致します。
のRewriteRule
パターンURLパスのみに一致し、ホスト名には一致しません(つまり、192.168.20.87
)。したがって、これは/page.php
、 (またはpage.php
相対パス/スラッシュプレフィックスなし)に一致します。ディレクトリ<Directory>
またはのようなコンテキスト.htaccess
。
したがって、代わりに次のようになります。
RewriteRule ^page\.php$ nothing
(ここで何をしようとしているのかは不明ですが、「何もしない」とはどういうことでしょうか? 404 をトリガーしようとしているのであれば、これは実際には適切な方法ではありません。)
@Gerritがコメントで大まかに言及したように、このRewriteRule
ディレクティブがサーバまたは仮想ホストコンテキスト(つまり、コンテナ内では<Directory>
ない.htaccess
)ディレクトリRewriteRule
コンテキストの場合、ディレクティブがファイル システムにマップされる前に、かなり早い段階で処理されるため、ディレクティブに一致する URL パスはスラッシュで始まるルート相対になります。例: ^/page\.php$
.
アップデート:
DocumentRoot /var/www/html/public_html/00-default <Directory "/volume/dev/html/public_html/00-default">
DocumentRoot
ディレクティブとディレクティブが 2 つの異なるファイルシステムの場所を参照していることに気付きました<Directory>
。質問の情報が限られているため、この<Directory>
コンテナーは処理されません。
しかし、他の場所に追加のディレクティブがない限り (必ずあるはずです)、.htaccess
ドキュメント ルート (ファイルを置く場所だと思います) に配置されたファイルも処理されることはありません。