1

このhtaccessコードを使用すると、リンクされたCSSファイルなどから500内部サーバーエラーが発生します。問題が何であるかを知っている人はいますか?私はまだhtaccessに精通していません。

コードは次のとおりです。

RewriteEngine On
RewriteBase /

RewriteRule ^(system|img|res) - [L]

RewriteRule ^picture/([^/]*)/?$ picture.php?id=$1 [L,QSA]

## The below code is something I found on the internet to remove the .php tag
# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{HTTP_HOST} ^www\.mywebsite\.com
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)index$ $1 [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

URLは次のようになっています:www.mysite.com/pictures/1(id)

idは常に数字です。

ページが表示され、IDをエコーできるので、その部分は機能していますが、上記のようにリンクされたファイルで500エラーが発生します。

4

1 に答える 1

1

なぜそれがそのように動作するのかわかりません..CSSフォルダーは、実際のphpファイルと同じフォルダーにあります。

相対 URI を使用してリンクしています。

<link rel="stylesheet" type="text/css" media="all" href="./css/text.css" />

cssファイルは./css/text.cssfileと同じディレクトリにあるかもしれませんがpicture.php(コンテンツを生成していると思います)、実際にCSSを要求するのはブラウザであり、picture.phpスクリプトではありません。ブラウザーはこの URLhttp://www.mysite.com/picture/1を要求し、サーバーは内部的に を に書き換えます/picture/1/picture.php?id=1、ブラウザーには何が起こったのかわかりません。したがって、ベース URI は/picture/. ブラウザが php ファイルに直接アクセスした場合http://www.mysite.com/picture.php?id=1、ベース URI は に/なり、css は/./css/text.css. しかし、/picture/1リクエストのベース URI が異なるため、ブラウザーは (ベースが異なるという手がかりがないまま) やみくもに CSS を取得しようとします。/picture/./css/text.css、その URI を誤って処理するルールがあるため、これは失敗します。通常は 404 が返されるだけですが、画像を書き換えた後のルールによって URI が誤って処理され、500 サーバー エラーが返されます。

ヘッダーに次のいずれかを追加できます。

<base href="/">

によって生成されたコンテンツでpicture.php、または URI を絶対にします。

<link rel="stylesheet" type="text/css" media="all" href="/css/text.css" />
于 2012-10-01T19:56:36.447 に答える