私はこれがうまく機能するWAMPを使用するWindows環境を持っています。 Ubuntuデスクトップ開発環境をセットアップしていますが、この特定のmod_rewriteが機能していません。
かなり基本的なことですが、
_example.local/files/a-real-file.pdf
_ Apacheから_404 not found
_を取得しました。私が行くなら
_example.local/files.php/a-real-file.pdf
_ファイルは期待どおりに表示されます。私が行くなら
_example.local/files.php/non-existing-file.who.cares
_ _files.php
_ロジックから期待どおりにvar_dump($thelink)
を取得します。
webルートの_.htaccess
_
_RewriteEngine On
RewriteRule ^files/(.*)$ files.php/$1
_
私のApache仮想ホスト設定
_<VirtualHost *:80>
ServerName reqapp.localhost
DocumentRoot /var/www/html/aaApp/public_html
<Directory /var/www/html/aaApp/public_html/>
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
_
そして良い尺度として、「localhost」conf
_<VirtualHost *:80>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
_
_Apache2.conf
_の「適用可能な」部分と同様に
_<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
_
phpinfo()
に従って_mod_rewrite
_がロードされます。 _.htaccess
_ファイルに構文エラーを作成すると、サイトがクラッシュします。
他にどこを見ればいいのかわからない。このディレクトリに影響を与えるはずの「{mods | conf | sites}対応」ファイル内の他の_.conf
_ファイルを細かくすることはできません。
私もJoomlaインスタンスを実行していて、SEFはそれで正常に動作していることを言及する価値があるかもしれません。
Options +Indexes +Includes +FollowSymLinks +MultiViews
MultiViews
を無効にする必要があります(または単に有効にしない)。例えば:
Options +Indexes +Includes +FollowSymLinks -MultiViews
または、サーバーで有効になっていない場合は、Options
ディレクティブから完全に削除します。
MultiViews
を有効にすると、mod_negotiationはfiles.php
の内部サブリクエストをトリガーします(リクエストの成功に必要な追加のパス名情報なしで)beforemod_rewriteがリクエストをテストします。したがって、RewriteRule
patternは一致せず、書き換えは発生しません。
PDATE: MultiViewsはmod_negotiation(コンテンツネゴシエーション)の一部です。あなたの場合の問題は、/files/...
(有効なディレクトリ-ドキュメントルート)をリクエストしていて、そのベース名を持つファイルがそのディレクトリに存在することです。 /bar/...
(おそらく存在しない)または/another.php/...
への書き換えを要求した場合、この問題は発生していません。
/files/...
をリクエストすると、MultiViewsは適切なリソース(files.*
-基本的にさまざまなファイル拡張子を試す)をApachesearchingして、期待されるMIMEで応答するまで結果を表示します。 -タイプが見つかりました。 「問題」は、これがリクエストの非常に早い段階で発生するため、mod_rewriteと競合することが多いことです。
これは、拡張子のないURLを有効にする簡単な方法です(URLの書き換えは必要ありません)。ただし、もう少し複雑なことを行う必要があるとすぐに、mod_rewriteと競合する可能性があります。これは一般的な問題です。 MultiViewsは、Apacheではデフォルトで有効になっていません(ただし、一部のsharedホストでは有効になっています)。