2

myname.com/index/ にアクセスすると、まだ /index/ フォルダーがありません。index.php のデータは取得されますが、/index/style.css が存在しないため、css は表示されません。存在しない多くのディレクトリ URL でこれをテストしましたが、すべて同じです。

/about/ about.php ページを表示します /contact/ contact.php ページを表示します

一致する .php ページが存在しない URL を読み込もうとしたときにのみ、404 が発生します。

例: blablabla.php が存在しないため、/blablabla/ は 404 を返します。

/about/ /contact/ /index/ および一致する .php ファイルを持つ他のディレクトリが 404 を返すようにするにはどうすればよいですか?

これは /etc/apache2/sites-available にある私の設定ファイルのコピーです

<VirtualHost *:80>
        ServerAdmin webmaster@yourname.com
        ServerName yourname.com
        ServerAlias www.yourname.com
        DocumentRoot /var/www/yourname.com/public_html
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/yourname.com/public_html/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /var/www/yourname.com/public_html/cgi-bin/

        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        LogLevel warn


     ErrorLog /var/www/yourname.com/logs/error.log
     CustomLog /var/www/yourname.com/logs/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

  <IfModule mod_expires.c>
   ExpiresActive on 
   ExpiresByType image/jpg "access 1 month"
   ExpiresByType image/gif "access 1 month"
   ExpiresByType image/png "access 1 month"
   ExpiresByType text/js "access 1 month"
   ExpiresByType application/x-shockwave-flash "access 1 month"
   ExpiresByType text/html "access 1 day"
   ExpiresDefault "access 7 days" 
  </IfModule>

# Turn on Expires and set default to 0
ExpiresActive On
ExpiresDefault A0

# Set up caching on media files for 1 year (forever?)
<filesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
ExpiresDefault A29030400
Header append Cache-Control "public"
</filesMatch>

# Set up caching on media files for 1 week
<filesMatch "\.(gif|jpg|jpeg|png|swf)$">
ExpiresDefault A604800
Header append Cache-Control "public"
</filesMatch>

# Set up 2 Hour caching on commonly updated files
<filesMatch "\.(xml|txt|html|js|css)$">
ExpiresDefault A7200
Header append Cache-Control "proxy-revalidate"
</filesMatch>

# Force no caching for dynamic files
<filesMatch "\.(php|cgi|pl|htm)$">
ExpiresActive Off
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</filesMatch>


# 480 weeks
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</filesMatch>

# 2 DAYS
<filesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
</filesMatch>

# 2 HOURS
<filesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, must-revalidate"
</filesMatch>

</VirtualHost>

/var/www/yourname.com/public_html の .htaccess ファイルのコピーを次に示します。

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile /var/www/yourname.com/.htpasswd 
AuthGroupFile /dev/null 
<Files admin.php>
require valid-user
</Files>
<Files systeminfo.php>
require valid-user
</Files>

私の .htaccess には、この問題を引き起こしていると思われるものは何もありません。基本的に、親ディレクトリにある 2 つのファイルをパスワードで保護しています。

4

1 に答える 1

1

マルチビューをオンにしているため、それが行われています。

MultiViews 検索は、MultiViews オプションによって有効になります。サーバーが /some/dir/foo の要求を受け取り、/some/dir/foo が存在しない場合、サーバーはディレクトリを読み取り、foo.* という名前のすべてのファイルを探し、それらすべての名前を付けた型マップを効果的に偽造します。クライアントがファイルの 1 つを名前で要求した場合と同じメディア タイプとコンテンツ エンコーディングを割り当てます。次に、クライアントの要件に最適なものを選択し、そのドキュメントを返します。

行を変更してみてください:

Options Indexes FollowSymLinks MultiViews

に:

Options Indexes FollowSymLinks -MultiViews

MultiViewsまたは、オプションを完全に削除します。なんらかの理由がない限り、オンにしていますか?

于 2012-07-30T03:40:19.360 に答える