URL重写返回500内部服务器错误

时间:2014-09-28 21:59:21

标签: php apache .htaccess mod-rewrite

我想转换这个:

site/read.php?id=6

site/read/6

我在SO上尝试了几个解决方案,最后一个是(输出:site/read/id/6): RewriteRule ^(.*?\.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA]

当我尝试第二个链接时,它会挂起,并且apache崩溃(LOL)。

不确定.htaccess文件的其余部分是否有问题,所以这里是完整的代码:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php
RewriteRule ^(.*?\.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA]

我可以实现(使用第1-4行)没有显示php扩展,因此地址栏当前显示为site/read?id=6

你能指出我哪里出错了吗?

2 个答案:

答案 0 :(得分:1)

您可以将此代码放入htaccess(必须位于根文件夹中)

Options -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} \s/read\.php\?id=([0-9]+)\s [NC]
RewriteRule . /read/%1? [R=301,L]

RewriteRule ^read/([0-9]+)$ /read.php?id=$1 [L]

答案 1 :(得分:-1)

我会在PHP中做到这一点,很难调试Apache获得的内容,它可能是无限循环,你在apache日志文件中找到了什么吗? 但是在PHP中省去麻烦,如果你使用的是框架,很容易包含一个检查这个问题的PHP,如果它在url中检测到.php,则会重定向到新页面。