.htaccess mod_重写挑战
我正在尝试创建一系列mod_重写规则来创建漂亮的URL 我想把.htaccess mod_重写挑战,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在尝试创建一系列mod_重写规则来创建漂亮的URL 我想把index.php?section=123&area=345&option=1作为/123/345/option=1提供 到目前为止,这一切都很好: RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 好的,这是我的第一个问题: 如果其中一个变量未定义,即如果有人浏览到/section而不是/section/area/,我如何强制它工作。如果禁用
index.php?section=123&area=345&option=1作为/123/345/option=1提供
到目前为止,这一切都很好:
RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3
好的,这是我的第一个问题:
如果其中一个变量未定义,即如果有人浏览到/section
而不是/section/area/
,我如何强制它工作。如果禁用了htaccess,是否可以将其自动创建为默认设置
类似地,如何强制/area/
具有尾随斜杠?如果现在没有尾随斜杠,我会得到404,因为系统正在寻找但没有找到第三个变量
你在找这样的东西吗
RewriteRule ^(.+)/(.+)/(.+)|(.+)/(.+)/?|(.+)/?$ /index.php?section=$1&area=$2&$3
您可以使用[或]标志来分隔这些子模式
这种模式可能不是现成的。您可能需要修改。当您试图“验证”用户的url输入时,这可能会变得非常糟糕
您可能希望将它们分开,以使其在长期内更易于维护,或者在需要添加更多扭曲的情况下
以下是一个例子:
#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
我不确定你对尾随斜杠有什么问题,url会变成123/456option=1吗?
无论如何,可以找到一些指南
我的意见是:
如果用户希望自己输入url,而不是依赖您的站点提供的链接,请停止重写url并给他们404,我不会鼓励用户出错谢谢这为我指明了正确的方向。最后,为了清晰起见,我将不同的规则分开,但这实际上是对代码的改编:RewriteRule^(+)/index.php?section=$1&area=$2&3[L]RewriteRule^(+)/index.php?section=$1&area=$2[L]RewriteRule^(+)/index.php?section=$1&area=$2[L]RewriteRule^(+)/index.php?section=$1&area
这将处理尾部斜杠问题,如果需要,我将使用PHP定义默认区域。