.htaccess 重写“/book.php?id=1234";到“/book/1234" [英] .htaccess rewrite "/book.php?id=1234" to "/book/1234"
问题描述
这是我目前在我的开发环境中所拥有的:
This is what I have so far in my development environment:
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 错误:
I've tried a lot of variants of this rule but I always get a 500 error:
RewriteRule ^(.*)$ /book.php?url=$1 [L]
这是在我的 Apache 的 error.log 中:
And this is in my Apache's 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.
我错过了什么,为什么重定向循环?
What am I missing, why the redirect loop?
推荐答案
您编写的 RewriteRule
似乎试图与您的问题标题所说的相反.你说你想让 htaccess 重写/book.php?id=1234 到/book/1234
,但是你的 RewriteRule
:
Your RewriteRule
as written appears to be trying to do opposite of what your question headline is saying. You say that you want htaccess rewrite /book.php?id=1234 to /book/1234
, but your RewriteRule
:
RewriteRule ^(.*)$ /book.php?url=$1 [L]
正在添加查询字符串参数.
Is adding a query string parameter.
下面的 RewriteRule 会将 rewrite/book.php?id=1234 重写为/book/1234
The RewriteRule below will rewrite 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
,下面应该这样做:
Also, if you really wish to go the other way, i.e. rewrite /book/1234
to /book.php?id=1234
the following should do that:
RewriteRule ^book/(.*)$ /book.php?id=$1 [L]
这篇关于.htaccess 重写“/book.php?id=1234";到“/book/1234"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!