我在.htaccess中使用以下代码:
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
# Special rewrite rules
# ideas/<id>
RewriteRule ^ideas/([0-9]+)$ idea\?id=$1
# users/<name>
RewriteRule ^users/(.+)$ users\?name=$1
这些想法/规则正常,正如我所期望的那样,但用户/规则似乎没有。它给了我一个HTTP 500错误,Apache日志说它超出了可用的重定向数量:
[Sun Jun 14 10:58:39 2009] [错误] [client 127.0.0.1]由于可能的配置错误,请求超出了10次内部重定向的限制。如有必要,使用'LimitInternalRecursion'增加限制。使用“LogLevel debug”获取回溯。,referer:http://localhost/users
我正在测试它的网址是/ users / ross,它应该可以正常工作。 / ideas / 1肯定能正常工作。
答案 0 :(得分:1)
按此顺序尝试:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
RewriteRule ^ideas/([0-9]+)$ idea?id=$1
RewriteRule ^users/(.+)$ users?name=$1
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]
答案 1 :(得分:1)
可以帮助您调试情况的是使重写远程(例如,让它们发送HTTP重定向)。通过这种方式,您将看到如何重写请求,以帮助您解决问题。
答案 2 :(得分:1)
我是否正确地假设您有一个users.php和idea.php文件?然后,您可以直接重定向到该文件,而无需再进行另一次重写。所以,对于这两个规则:
RewriteRule ^ideas/([0-9]+)$ idea.php?id=$1
RewriteRule ^users/(.+)$ users.php?name=$1
(另外:无需转义结果中的问号)
顺便说一句:为什么users.php复数而idea.php不是?你是如何处理/ ideas / abc等的?
答案 3 :(得分:0)
在修复此文件之前添加/:
RewriteRule ^ideas/([0-9]+)$ ideas?id=$1
RewriteRule ^users/(.+)$ users?name=$1
为:
RewriteRule ^ideas/([0-9]+)$ /ideas?id=$1
RewriteRule ^users/(.+)$ /users?name=$1