是否可以使用 .htaccess 将六位数字 URL 发送到脚本,但将所有其他无效 URL 处理为 404?

StackOverflow https://stackoverflow.com/questions/73123

  •  09-06-2019
  •  | 
  •  

是否可以使用 .htaccess 通过将所有六位数 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 可能是一个更优雅的解决方案,但我还无法弄清楚它是否可能。

有帮助吗?

解决方案

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^([0-9]{6})$ scriptname.php?no=$1 [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/

其他提示

在您的 htaccess 文件中,输入以下内容

RewriteEngine On
RewriteRule ^([0-9]{6})$ /scriptname.php?no=$1 [L]

第一行打开 mod_rewrite 引擎。() 括号将内容放入 $1 - 连续的 () 将填充 $2、$3...等等。[0-9]{6} 表示查找长度正好为 6 个字符且仅包含字符 0-9 的字符串。

末尾的 [L] 使其成为最后一个规则 - 如果它适用,规则处理将停止。

哦,^ 和 $ 标记传入 uri 的开始和结束。

希望有帮助!

是的,用 mod_rewrite 是可以的。网上有大量好的 mod_rewrite 教程,快速的 Google 搜索应该会立即找到您的答案。

基本上,您要做的是确保您使用的正则表达式只是查找数字而不是其他字符,并确保长度为 6。然后,您将使用捕获的数字重定向到 scriptname.?no= 。

希望这可以帮助!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top