1

私は次のような .htaccess を持っています:

ErrorDocument 404 /error/404.php

Options +FollowSymlinks

RewriteEngine On

RewriteRule articles/(.*)-(.*) articles.php?$2=$1
RewriteRule download/(.*) download.php?q=$1

#add extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]

さて、私の問題は次のとおりです。ローカルホストでは正常に動作しますが、サーバー(mod_rewriteが有効でチェックされている)では500エラーがスローされます。何か案は?

4

2 に答える 2

1

完全な .htaccess を次のようにします。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^articles/([^-]+)-(.*)$ articles.php?$2=$1 [L,QSA,NC]
RewriteRule ^download/(.*)$ download.php?q=$1 [L,QSA,NC]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
于 2013-09-07T18:35:48.537 に答える
0

Apache エラー ログを確認します。の量が増えると、書き換えに気付くでしょう.php。問題は、ファイルが存在しない場合、.php「too many internal rewrites」でエラーになるまで追加し続けることです。.phpリクエストに拡張機能がすでに含まれているすべてのケースを除外する必要があります。

#add extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule (.*) $1.php [L]

最後のルールを他のルールで正しく機能させるには、他のルールにも[L]フラグが必要です。.htaccessこれにより、変数の正しい情報を使用してapache が再度実行されます。

RewriteRule articles/(.*)-(.*) articles.php?$2=$1 [L]
RewriteRule download/(.*) download.php?q=$1 [L]
于 2013-09-07T18:25:46.747 に答える