.htaccess mod_重写挑战

.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/,我如何强制它工作。如果禁用

我正在尝试创建一系列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/
    ,我如何强制它工作。如果禁用了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定义默认区域。