0

今日、私は次の書き換えルールを書きました:

RewriteCond %{HTTP_HOST} ^visionale\.book [NC]
RewriteRule ^\/([^/]+)\/$ $1.php [L]

RewriteCond %{HTTP_HOST} ^(www\.)?visionale\.se [NC]
RewriteRule ^(.*)/$ $1.php

1 つ目は、Web ホテルの 2 つ目のルールである Apache を実行するラップトップ用です。

最初の書き換えを Web ホテルに適用すると、404 Not Found になります

私のラップトップに 2 番目のルールを適用すると、不思議なことに "pagename.php.php.php" が見つかりません。

私が提供したソリューションは両方の場所で機能しますが、実際に何が起こっているのか困惑しています。私のローカル マシンは Apache 2.4.6 を実行しています。ウェブホテルはLitespeedを運営しています。したがって、これはもちろん非互換性ですが、まさにその方法です。

私の推測では、Litespeed は機能がないために最初のルールを見逃していると思いますが、なぜ Apache は私が過去に何度も使用してきたより簡単なルールを取得しないのでしょうか?

編集:質問を明確にする。

このルール:

RewriteRule ^\/([^/]+)\/$ $1.php [L]

Litespeed を実行している Web ホテルで選択されません。これは、Litespeed の書き換え実装に欠陥があるためだと思います。その予感を確認するか、別の説明を提供したいと思います。

このルール:

RewriteRule ^(.*)/$ $1.php

私の開発マシンではもう動作しません、過去には動作していました。それは十分に単純に思えます。末尾のスラッシュで終わるものはすべて、代わりに「.php」拡張子を取得する必要があります。ただし、私の開発マシンでは、1 つではなく 3 つの「.php」が追加されます。ルールは Web ホテルで意図したとおりに機能し、過去にローカルでも機能しました。これは不可解であり、説明が必要です。

4

1 に答える 1

0

どちらのルールも正しくありません。最初に正しいコードを提供させてください:

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

RewriteCond %{HTTP_HOST} ^visionale\.book$ [NC]
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ $1.php [L]

RewriteCond %{HTTP_HOST} ^(www\.)?visionale\.se$ [NC]
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?)/?$ $1.php [L]

今あなたのコードの問題:

  1. RewriteRulein.htaccessは、ストライプされている先頭のスラッシュとの一致を開始しませんmod_rewrite
  2. これらのルールの再照合を避ける必要があります。RewriteCond %{REQUEST_FILENAME} !-fそれ以外の場合は、URI にmod_rewrite追加し続けます。.php
于 2013-09-21T16:51:53.290 に答える