我正在尝试转换这个:
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时重定向到新页面。