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