是否可以使用.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/