0

これは、私の開発環境でこれまでに持っているものです。

php_value error_log log/php.log
php_value display_errors 1
php_value magic_quotes_gpc Off

RewriteEngine On

# remove slash
RewriteCond %{REQUEST_FILENAME} !-d

# file.php to /file
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteCond %{REQUEST_URI} !^/ajax.php
RewriteRule ^(.+)\.php$ http://localhost/$1 [R=301,L]

# /file to file.php
RewriteRule ^([^/.]+)$ $1.php [L]

このルールのさまざまなバリエーションを試しましたが、常に 500 エラーが発生します。

RewriteRule ^(.*)$ /book.php?url=$1 [L]

そして、これは私の Apache の error.log にあります:

[Fri Jul 27 19:56:51 2012] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

何が欠けているのですか?なぜリダイレクトループが発生するのですか?

4

2 に答える 2

4

RewriteRule書かれているとおり、質問の見出しが言っていることとは反対のことをしようとしているようです。あなたは欲しいと言いますhtaccess rewrite /book.php?id=1234 to /book/1234が、あなたのRewriteRule

RewriteRule ^(.*)$ /book.php?url=$1 [L]

クエリ文字列パラメーターを追加しています。

以下の RewriteRule は書き換えますrewrite /book.php?id=1234 to /book/1234

RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^book\.php$ /book/%1? [L]

また、本当に逆の方向に進みたい場合は、次のように書き直し/book/1234/book.php?id=1234ください。

RewriteRule ^book/(.*)$ /book.php?id=$1 [L]
于 2012-07-31T22:19:30.057 に答える
1

これを試して!

# in htaccess file write this
RewriteEngine on 

RewriteRule ^book/([0-9]+) book.php?id=$i

# and in you html or php file call

book.php?id=$i 

ページバイ

book/$i 

あなたは終わった。

于 2018-10-25T07:18:24.400 に答える