1

したがって、htaccess ファイルを次のように書き換えます。

RewriteRule ^([^/.]+)/?$ index.php?page=$1 [L]

に行こうとするたびにhttp://domain/index404が返されますが、に行こうとしhttp://domain/index.たり、のような存在しないページに移動しようとするhttp://domain/aと、書き換えは正常に機能し、index.phpvar_dump()は適切な値になります。

index.php の唯一のコードはvar_dump($_GET);であるため、php の問題ではないことはわかっています。

書き換えルールの何が問題なのか、また修正方法を説明してくれる人はいますか?

編集: エラーログが有効になっていることを忘れていました。error.log に保存し続けるエラーは次のとおりです。

[Sun Feb 24 21:01:18 2013] [error] [client 192.168.1.1] Negotiation: discovered file(s) matching request: /path/public_html/index (None could be negotiated).
4

2 に答える 2

3

エラーにより、MultiViewsが有効になっているようです。

ファイルの先頭でこれを試すことができます:

Options +FollowSymlinks -MultiViews

さらに、次のことをお勧めします。

# Prevent loops
RewriteCond %{REQUEST_URI} !index\.php [NC]
RewriteRule ^([^/]+)/? index.php?page=$1 [L] 

MultiViewsは、 ここContent Negotiationで最もよく説明されているを提供します

于 2013-02-25T06:28:30.853 に答える
1

MultiViewsが有効になっている場合( Options +MultiViews)、Content Negotiationモジュールは に一致するファイルを探しますが、ファイルは一致indexする.php資格がないため、 で失敗しNone could be negotiatedます。.php以下を使用して、一致としてハンドラーを追加できます。

MultiviewsMatch Handlers Filters

に記載されているとおりですMultiviewsMatch

于 2014-04-28T16:46:56.013 に答える