1

当初、このコードは「きれいな」 URLを作成するために作成されました。

以下のコードを使用すると、mod_rewriteは正常に機能します。

<Directory /var/www/vhosts/myurl.com/httpdocs>
    Options Indexes FollowSymLinks
    php_admin_flag engine on
    php_admin_value open_basedir none
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

RewriteEngine on
RewriteCond %{HTTPS} !=off
RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteCond $1 ^(register|account|logout|profile|edit_profile).*$
RewriteRule ^/(.*)$ https://myurl.com/?get=$1 

https://myurl.com/registerなどの一致する URL を受け取り、それをhttps://myurl.com/?get=registerに書き換えます。適切なページが検索され、ブラウザに表示されます。

ただし、元の URL をブラウザーに渡す必要があります。これを実現するために、以下に示すように[PT] フラグを RewriteRuleに追加しました。

RewriteRule ^/(.*)$ https://myurl.com/?get=$1 [PT]

これにより、 https://myurl.com/register (上記と同じ URL) がブラウザーにスルーされますが、ページは表示されなくなります。代わりに、次のエラーが返されます。

Bad Request
Your browser sent a request that this server could not understand.
Client sent malformed Host header

関連情報:

OS: Linux
サーバー: Apache
コントロール: Plesk
ディレクトリ: /var/www/vhosts/myurl.com/conf
ファイル: vhost_ssl.conf

複数のフォーラムや記事を検索しましたが、役に立ちませんでした。

Article 1: mod_rewrite でよりきれいな URL を作る([PT] フラグの使用を含む)

ここで何が起こっているのか、それを修正する方法について誰か考えがありますか? 「きれいな」 URLを表示するにはどうすればよいですか?

4

1 に答える 1

0

それで、2日間の欲求不満の後、私はついにパズルを解きました。

まず、RewriteRuleを次のように変更して実験しました。

RewriteRule ^/(.*)$ https://myurl.com/?get=$1 [P]

RewriteRule ^/(.*)$ https://myurl.com/index.php?get=$1

フラグなし。

これにより、書き換えがトリガーされるたびに無限ループが発生しました。しかし、URLをリダイレクトせずにループが発生していることに気づきました(「かなりのURL」を維持しています)。進捗!

コードを単純化することにしました。以下に示すように、 RewriteCondから「LA-U:」を削除しました。

RewriteCond %{LA-U:REQUEST_FILENAME} !-f
RewriteCond %{LA-U:REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

それがトリックでした!コメントしてくれた人たちに感謝します。これが将来誰かに役立つことを願っています。

于 2012-01-10T23:54:29.957 に答える