繁体   English   中英

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] 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中执行dthis,很难调试Apache得到的东西,可能是进入了不确定的循环,您是否在apache日志文件中找到了任何东西? 但是省去了麻烦,用PHP做到了,如果您使用的是Framework,那么很容易引入一个PHP进行检查,并在URL中检测到.php时重定向到新页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM