0

本当に間違いを見つけることができません。サイトマップ/リンクにアクセスできますが、他のすべてでは 404 Not Found エラーが発生します。

DirectoryIndex index.php index.php?page=home index.php?page=error
Options Indexes FollowSymLinks MultiViews

AllowOverride All
Order allow,deny
Allow from all

<IfModule mod_rewrite.c>
    RewriteEngine On

    # some other stuff #

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteBase /
    RewriteRule ^sitemap/?$ sitemap.xml.php [L]
    RewriteRule ^([a-zA-Z]+)/?$ index.php?page=$1 [L]
    RewriteRule ^products/?$ index.php?page=products [L]
    RewriteRule ^products/([0-9]+)/?$ index.php?page=products&id=$1 [L]
</IfModule>

私は本当に.htaccessファイルが嫌いです...

4

1 に答える 1

0

ルールの書き換えはさておき、ここには他の問題があります。

DirectoryIndex index.php index.php?page=home index.php?page=error

つまり、フォルダーの場合、インデックスを表示するファイルが次の順序で選択されます (最初に存在するファイルが優先されます)。

  1. index.php
  2. index.php?page=home(これはファイル名です)
  3. index.php?page=error(これはファイル名です)

これがあなたの意図であったとは思えません。

次:

AllowOverride All

あなたがすでに参加していて、.htaccess制限AllowOverrideがあった場合、これは役に立ちません。そうでない場合は、これをもう一度書く意味はありません。

Order allow,deny
Allow from all

これは基本的に、デフォルトである「どこでも全員を許可する」と言っています。上位レベルまたはApache構成で何らかの方法で制限されていない限り、これは冗長です。


書き直しについて:

RewriteRule ^([a-zA-Z]+)/?$ index.php?page=$1 [L]
RewriteRule ^products/?$ index.php?page=products [L]

2 番目のルールはとにかく冗長であり、到達することはありません (最初のルールも一致するため)。


あなたが見ているエラーについては:

[Wed Jul 04 02:56:30 2012] [error] [client 127.0.0.1] File does not exist: /var/www/home"

これは、DocumentRoot定義の問題を意味している可能性があります。構成を投稿してくださいVirtualHosts

于 2012-07-04T08:40:58.333 に答える