3

是否可以使用 .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 可能是一个更优雅的解决方案,但我无法弄清楚它是否可能。

4

3 回答 3

11

在您的 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 的开始和结束。

希望有帮助!

于 2008-09-16T14:52:07.490 回答
4
<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/

于 2008-09-16T15:02:41.210 回答
0

是的,使用 mod_rewrite 是可能的。网上有很多很好的 mod_rewrite 教程,快速的谷歌搜索应该很快就会找到你的答案。

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

希望这可以帮助!

于 2008-09-16T14:48:15.970 回答