.htaccess mod_rewrite挑战

时间:2011-12-21 04:48:23

标签: .htaccess mod-rewrite

我正在尝试创建一系列mod_rewrite规则来制作漂亮的网址。

我想提供index.php?section=123&area=345&option=1 as /123/345/option=1

到目前为止,这很好 - 这有效:

RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3

好的,这是我的第一个问题:

  1. 如果未定义其中一个变量,如何强制它工作,即。如果有人浏览/section而不是/section/area/。我是否可以将htaccess作为默认设置自动创建/area/

  2. 同样,如何强制/area/使用尾部斜杠?如果它目前没有尾随斜杠,我得到一个404,因为系统正在寻找但没有找到第三个变量。

2 个答案:

答案 0 :(得分:1)

你在找这样的东西,

RewriteRule ^(.+)/(.+)/(.+)|(.+)/(.+)/?|(.+)/?$ /index.php?section=$1&area=$2&$3

您可以通过[OR]标记分隔这些子图。

这种模式可能没有开箱即用。您可能需要修改。

答案 1 :(得分:0)

当您尝试“验证”用户的网址输入时,这可能会非常难看。

您可能希望将它们分开以使其在长期运行中更易于维护,或者在您想要添加更多曲折的情况下。

以下是一个例子:

#sunshine case
RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3

#if user enter /123/option=1, ie forgot 456 as the area
RewriteRule ^(.+)/option=(.+)$ /index.php?section=$1&area=default&$2

我不确定你的尾随斜线是什么问题,网址不会成为123/456option=1? 无论如何,可以找到一些指南here

我的意见: 如果用户想要自己输入网址而不是依赖网站提供的链接,请停止重写网址并向其提供404,我不会鼓励用户出错