是否可以使用.htaccess向脚本发送六位数的URL,但将所有其他无效的URL处理为404?
时间:2020-03-05 18:56:11 来源:igfitidea点击:
是否可以使用.htaccess通过将所有六位URL发送到脚本来处理所有六位URL,但将其他所有无效URL作为错误404处理?
例如:
http://mywebsite.com/132483
将被发送到:
http://mywebsite.com/scriptname.php?no=132483
但
http://mywebsite.com/132483a or http://mywebsite.com/asdf
将被视为404错误。
我目前通过一个自定义的PHP 404脚本进行此操作,但这有点笨拙。在我看来,.htaccess可能是一个更优雅的解决方案,但我仍然无法弄清楚是否有可能。
解决方案
回答
是的,使用mod_rewrite是可能的。在线上有很多很好的mod_rewrite教程,快速的Google搜索应该可以迅速找到答案。
基本上,我们要做的是确保使用的正则表达式只查找数字而不包含其他字符,并确保长度为6. 然后我们将使用我们输入的数字重定向到scriptname.?no=被抓获。
希望这可以帮助!
回答
在htaccess文件中,输入以下内容
RewriteEngine On RewriteRule ^([0-9]{6})$ /scriptname.php?no= [L]
第一行打开mod_rewrite引擎。 ()括号将内容放入$ 1,连续()将填充$ 2,$ 3 ...,依此类推。 [0-9] {6}表示查找正好6个字符长的字符串,其中仅包含字符0-9.
最后的[L]使其成为最后一条规则(如果适用),规则处理将停止。
哦,^和$标记传入的uri的开始和结束。
希望对我们有所帮助!
回答
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^([0-9]{6})$ scriptname.php?no= [L] </IfModule>
保留干净的URL
http://mywebsite.com/132483
提供scriptname.php时,仅使用[L]。
使用[R = 301]会将我们重定向到scriptname.php?no = xxx
我们可能会发现此有用的http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/pdf/