2014-09-28 72 views
2

我想转换此:URL重写返回500内部服务器错误

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

请问您能指出我哪里出错了吗?

+0

这就是所谓的URL路由。我认为这样做的最好也是最简单的方法是使用一些框架,比如'Codeigniter'或'Laravel'。但是你可以自己动手,不用任何带有一点搜索的框架:http://blogs.shephertz.com/2014/05/21/how-to-implement-url-routing-in-php/ – Sky 2014-09-28 22:13:04

回答

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] 
+0

谢谢Justin,它当我一次尝试全部使用它时,它并不适用于我,但是如果我仅添加最后一行,它就完全符合我的要求。另外,为了将来参考,可能需要使用此方法更改CSS路径。 – 2014-09-29 08:57:39

-1

我会在PHP中执行此操作,调试Apache正在获取的内容非常困难,它可能会进入无限循环,您是否在apache日志文件中发现任何内容? 但是,如果您使用的是框架,那么请保存自己的麻烦并且在PHP中执行此操作,否则很容易引发一个检查此问题的PHP,并在检测到url中的.php时重定向到新页面。

相关问题