是否可以使用 .htaccess 将六位数字 URL 发送到脚本,但将所有其他无效 URL 处理为 404?
题
是否可以使用 .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= 。
希望这可以帮助!
不隶属于 StackOverflow