【问题标题】:htaccess - Category / Subcategory / Pagehtaccess - 类别/子类别/页面
【发布时间】:2025-12-31 12:10:12
【问题描述】:

我有一个小问题:

我的网址:localhost/cat/Category/Subcategory/Page

示例:本地主机/猫/电影/3d/7

代码:

RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/?$ $1.php?wq=$2 [NC,L]  ## wq is Category
RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/?$ $1.php?wq=$2&wsq=$3 [NC,L]  ## wsq is Subcategory / but if no Subcategory and Pagination -> False it must be "&wpq="
RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/?$ $1.php?wq=$2&wsq=$3&wpq=$4 [NC,L]   ## wpq is Pagination

我当前的 htaccess:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-z0-9\-]+)/?$ $1.php [NC,L]

RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/?$ $1.php?wq=$2 [NC,L]  ## wq is Category
RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/?$ $1.php?wq=$2&wsq=$3 [NC,L]  ## wsq is Subcategory / but if no Subcategory and Pagination -> False it must be "&wpq="
RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/?$ $1.php?wq=$2&wsq=$3&wpq=$4 [NC,L]   ## wpq is Pagination

RewriteCond %{REQUEST_METHOD} !POST [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([\w.-]+)/?$ $1.php [L]

这样就可以了,只有输入一个类别(并且没有子类别)时才有问题,然后应该检查参数2是否只有数字。

如果只输入数字,那么它不是子类别而是分页参数(那么第二个参数必须是“wsq”而不是“wsq”)。

希望你明白我的意思:D

这可以用 Php 完成,但我认为通过 .htaccess 更好?

已经提前谢谢你了。

【问题讨论】:

    标签: apache .htaccess parameters subquery categories


    【解决方案1】:

    如果我明白了,请替换:

    RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/?$ $1.php?wq=$2&wsq=$3 [NC,L]
    

    与:

    RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/(\d+)/?$ $1.php?wq=$2&wpq=$3 [NC,L]
    RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/?$ $1.php?wq=$2&wsq=$3 [NC,L]
    

    (\d+)(相当于([0-9]+)([[:digit:]]+))匹配一个数字。这个新规则更具体,需要位于之前您的“常规”规则(需要字母和/或数字和/或破折号)。

    【讨论】:

    • 谢谢你,它很好用 ;) 但如果我得到这样的网址:localhost/cat/?wq=filme 它不会重写为localhost/cat/filme RewriteRule ^([a-z0-9\-]+) /([a-z0-9\-]+)/?$ $1.php?wq=$2 [NC,L]
    • 不确定:如果您希望/cat/?wq=filme 被重定向到/cat/filme,您目前没有这样做的规则。