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


URL Rewriting returns 500 internal server error

我正在尝试转换这个:

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

你能指出我哪里错了吗?

您可以将此代码放在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]

我会用PHP做数据处理,很难调试Apache得到的东西,可能是它进入了无限循环,你在Apache日志文件中发现了什么吗?但是,如果你使用的是一个框架,那么很容易引入一个PHP来检查这一点,并在url中检测到.PHP时重定向到新页面。