【问题标题】:Messed up in url-rewriting搞砸了 url 重写
【发布时间】:2020-05-11 23:15:18
【问题描述】:

因此,思考并创建一个新网站,视频库风格,包含类别、模型、视频等。

我创建了脚本、页面、url 等,现在最好创建一个 url_rewriter 来简化并使 url 更具 SEO。

但是我搞砸了,我越来越糊涂了。

这些是我网站的 url,以及我想在其中转换它们的 url。

index.php
my-url.com

categories.php
my-url.com/categories/

category.php?category=category
my-url.com/category/

category.php?category=category&page=1
my-url.com/category/page-1/

category.php?category=category&sort=sort
my-url.com/category/sort/

category.php?category=category&page=1&sort=sort
my-url.com/category/page-1/sort/

my-url.com/models.php
my-url.com/models/

my-url.com/model.php?model=Model-Name
my-url.com/model/Model-Name

my-url.com/model.php?model=Model-Name&page=1
my-url.com/model/Model-Name/page-1/

my-url.com/model.php?model=Model-Name&sort=sort
my-url.com/model/Model-Name/sort/

my-url.com/model.php?model=Model-Name&page=1&sort=sort
my-url.com/model/Model-Name/page-1/sort/

my-url.com/videos.php
my-url.com/videos/

my-url.com/videos.php?page=1
my-url.com/videos/page-1/

my-url.com/videos.php?sort=sort
my-url.com/videos/sort/

my-url.com/videos.php?page=1&sort=sort
my-url.com/videos/page-1/sort/

my-url.com/video.php?title=video-title
my-url.com/video/video-title.html

这是我到目前为止所写的 url rewrititng,它现在可以做它想做的事,而不是它应该做的或我想要做的。

RewriteRule ^([^/]+)\/$ category.php?category=$1 [NC,L]
RewriteRule ^([^/]+)/page-([^/]+)/$ category.php?category=$1&page=$2 [NC,L]

RewriteRule ^([^/]+)\/([^/]+)\/$ category.php?category=$1&sort=$2 [NC,L]
RewriteRule ^([^/]+)/page-([^/]+)/([^/]+)/$ category.php?category=$1&page=$2&sort=$3 [NC,L]


RewriteRule ^models/$ models.php

RewriteRule ^model/([[A-Za-z0-9_]]+)\/$ model.php?model=$1 [NC,L]
RewriteRule ^model/([^/]+)/page-([^/]+)\/$ model.php?model=$1&page=$2 [NC,L]

RewriteRule ^model/([^/]+)\/([^/]+)\/$ model.php?model=$1&sort=$2 [NC,L]
RewriteRule ^model/([^/]+)/page-([^/]+)/([^/]+)\/$ model.php?model=$1&page=$2&sort=$3 [NC,L]


RewriteRule ^videos/$ page.php
RewriteRule ^videos/page-([^/]+)\.html$ page.php?page=$1 [NC,L]


RewriteRule ^video/([^/]+)\.html$ out.php?id_photo=$1 [NC,L]

到现在我觉得我真的搞砸了,我越摸它似乎越糟糕...... 即使我去 url my-site.com/model/Model-Name,他也明白他必须使用 model.php 文件,但没有看到 model-name 变量,我真的不明白为什么了。

所以,我需要一些帮助来了解如何编写 url_rewriter。

我还想知道这是否是此类网站的最佳目录/url 结构,或者是否有更好的结构。

任何建议或帮助将不胜感激(因为我真的很困惑)

【问题讨论】:

    标签: apache mod-rewrite url-rewriting


    【解决方案1】:

    我在您的规则集中发现了一些错误,我在下面对其进行了编辑并总结了更改:

    RewriteRule ^models\/$ models.php [NC,L]
    
    RewriteRule ^model/([A-Za-z0-9_]+)\/$ model.php?model=$1 [NC,L]
    RewriteRule ^model/([A-Za-z0-9_]+)\/page-([^/]+)\/$ model.php?model=$1&page=$2 [NC,L]
    
    RewriteRule ^model/([A-Za-z0-9_]+)\/([^/]+)\/$ model.php?model=$1&sort=$2 [NC,L]
    RewriteRule ^model/([A-Za-z0-9_]+)/page-([^/]+)/([^/]+)\/$ model.php?model=$1&page=$2&sort=$3 [NC,L]
    
    
    RewriteRule ^videos\/$ page.php [NC,L]
    RewriteRule ^videos\/page-([^/]+)\.html$ page.php?page=$1 [NC,L]
    
    
    RewriteRule ^video/([^/]+)\.html$ index.php?id_photo=$1 [NC,L]
    
    RewriteRule ^([^/]+)\/$ category.php?category=$1 [NC,L]
    RewriteRule ^([^/]+)/page-([^/]+)/$ category.php?category=$1&page=$2 [NC,L]
    
    RewriteRule ^([^/]+)\/([^/]+)\/$ category.php?category=$1&sort=$2 [NC,L]
    RewriteRule ^([^/]+)/page-([^/]+)/([^/]+)/$ category.php?category=$1&page=$2&sort=$3 [NC,L]
    
    • 规则将自上而下执行,因此模型规则将永远不会执行,因为您使用的第一个规则集已经匹配任何请求:model 将成为一个类别,model-name 将成为一个排序.要解决此问题,您必须从限制性最强的规则开始,并以限制性最小的规则结束。当一个请求不是以模型或视频开头时,它最终会尝试在category 中重写它。

    • 在第一个模型/重写规则中,您使用双括号 [,在这种情况下您应该使用一个。

    • 在视频规则中,您忘记声明必要的标志
    • 我注意到您在第一条规则中只允许字母数字字符和下划线,但在第二条规则中允许除正斜杠之外的所有字符,我冒昧地更改了这一点。

    另请注意,在请求与上述任何内容匹配之前,您的规则需要在每个请求的尾部加上斜杠。如果您希望尾部斜杠可选,可以将 $ 之前的 / 替换为 (\/|)

    【讨论】:

      猜你喜欢
      • 2014-04-28
      • 2011-10-11
      • 1970-01-01
      • 2013-10-28
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多