我想转换这个:
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 :(得分: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,则会重定向到新页面。