【问题标题】:Rewrite URL with Optional Parameter使用可选参数重写 URL
【发布时间】:2017-05-28 02:40:09
【问题描述】:

我有这个网址
category/product/index.php?itemid=WdS7Dk3L&title=new-product

我想把它改写成这个,第二个参数是可选的
category/product/WdS7Dk3L/new-product
或
category/product/WdS7Dk3L/

我的htaccess放在
category/product/.htaccess

我从this post 得到了这个,但我无法让它工作。
RewriteRule ^category/product/([^/]*)/?(.*)$ index.php?itemid=$1&title=$2

请帮我指出正确的方向。 谢谢。

【问题讨论】:

    标签: apache .htaccess mod-rewrite parameters optional


    【解决方案1】:

    .htaccess 文件重写匹配是相对于.htaccess 文件的位置,所以使用这个:

    RewriteRule ^([^/]+)(?:/(.*))?$ index.php?itemid=$1&title=$2
    

    您仅将第二个参数指定为可选,因此我将第一个 *(零个或多个)更改为 +(一个或多个,如那里的某些内容)并删除了 ? (可选)在斜杠上,因为它在您的两个示例中。

    更新

    当没有提供第二个参数时,匹配已更新,使第一个参数后的斜杠可选。

    【讨论】:

    • 太棒了。我注意到你是新来的。与正确答案有关的是用左上角的勾号接受它,现在您拥有超过 15 个声望,您也可以投票表示它很有用(勾号附近的向上箭头)。这给了我一些答案的声誉,并帮助其他人轻松地看到它对你有用。谢谢!
    • 我能再问一个关于这个的问题吗?我该怎么做才能接受斜杠而不是? category/product/WdS7Dk3L/ 和 category/product/WdS7Dk3L
    • 不...很抱歉,带有斜杠的 URL 可以使用 category/product/WdS7Dk3L/,但如果没有斜杠,则在仅提供第一个参数时它不能 category/product/WdS7Dk3L。
    • 它使用 2 个规则以这种方式工作。RewriteRule ^([a-zA-Z0-9-]+)/?$ index.php?itemid=$1 [L] RewriteRule ^([^/]+)/(.*)$ index.php?itemid=$1&title=$2
    • 啊,对不起,我误解了,之前在第二个参数而不是第一个参数中添加了一个可选的斜杠。现在已经完成了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2011-10-22
    • 2012-06-19
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多