.htaccess Php rewrite url



我尝试在.htaccess中实现重写URL的系统。

那么这是我的目标: 如果我有此形式的网址:http://localhost/view.php?Id=456

然后我想将其转换为:http://localhost/456

我在 htaccess 中使用此规则:

RewriteRule ^ ([a-zA-Z0-9] +) $ view.php? Id = $ 1

现在这很好用!

但是我的问题我想向id添加点,即我可以放的456点:my.book

也就是说:http://localhost/my.book

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9.]+)$ view.php?id=$1 [QSA,L]

您需要在RewriteRule行之前RewriteCond %{REQUEST_FILENAME} !-f告诉服务器,如果URL中传递的输入不是实际文件,则执行下面编写的RewriteRule。因为服务器搜索与您在 URL 中传递的输入匹配的文件,并且在您在 URL 中传递my.book的情况下它不起作用,因为 Web 服务器将.识别为扩展名的前缀,如.php.html或类似,因此如果没有名为my.book的文件存在Not Found则会导致错误。因此,您还需要转义URL中的.

要在输入中允许.,您需要在字符类组中添加带有转义序列.,如^([a-zA-Z0-9.]+)$。请注意,允许这样做可能会导致 URL 中的扩展名转义,也就是说,在 URL 中传递view.php不会导航到实际文件。相反,它将被视为查询字符串中的值。

试试这个:

RewriteRule ^([a-zA-Z0-9.]+)$ view.php?Id=$1

基本上我所做的是我用你的模式添加了.。这将确保您的正则表达式匹配任何字母(小/大写)、十进制数字和句点 (.)。希望这对:)有所帮助

最新更新