我正在尝试创建一系列mod_rewrite规则来制作漂亮的网址。
我想提供index.php?section=123&area=345&option=1 as /123/345/option=1
到目前为止,这很好 - 这有效:
RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3
好的,这是我的第一个问题:
如果未定义其中一个变量,如何强制它工作,即。如果有人浏览/section
而不是/section/area/
。我是否可以将htaccess作为默认设置自动创建/area/
?
同样,如何强制/area/
使用尾部斜杠?如果它目前没有尾随斜杠,我得到一个404,因为系统正在寻找但没有找到第三个变量。
答案 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,我不会鼓励用户出错