【问题标题】:Mod Rewrite for unlimited categories无限类别的Mod重写
【发布时间】:2013-05-25 22:09:34
【问题描述】:

我正在构建一个包含类别的网站,我想通过 URL 访问它们。

示例:
http://website.com/category-1/category-2

类别的数量没有限制,因此可能有 1 个,也可能有 1,000 个。

我必须做些什么才能进行可以支持许多类别的重写?然后我会将它传递给 php 进行解析。

这是我尝试过的(Gives 404):

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /category.php?params=$1 [L,QSA]

【问题讨论】:

标签: apache .htaccess mod-rewrite


【解决方案1】:

如果您不想依赖 PHP,以下规则集可能对您有用:

RewriteEngine on
RewriteRule ^([^/]+)/(.+)$ /$2?catstr[]=$1 [QSA,N] 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)$ /category.php?catstr[]=$1&category=1 [QSA,L]

简短说明:

第一条规则将匹配 /directory/anything 并重定向到 anything?catstr[]=directory . QSA 标志将强制它保留查询字符串参数,而 N 标志将强制 rewrite_rule 倒回规则集。

最后一条规则就是你的最后一条。

因此,按顺序,点击 /a/b/c/def 的人将在内部被抛出(这些查询将不会执行):

/b/c/def?catstr[]=a

/c/def?catstr[]=b&catstr[]=a

/def?catstr[]=c&catstr[]=b&catstr[]=a

/category.php?catstr[]=def&catstr[]=c&catstr[]=b&catstr=a&category=1

注意顺序将被颠倒是有用的。这可以对您有利,并且是一项功能,而不是错误。如何将第一个重写规则以正确的方式排序的练习留给读者练习。

然后,您可以使用 PHP 中的 $_GET['catstr'] 数组来使用 URI 的每一段。

【讨论】:

  • 没想到做数组!我喜欢!
【解决方案2】:

我想我明白了,这就是我所拥有的。

.htaccess:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /category.php?catstr=$1&category=1 [L,QSA]

PHP:

<?php
$categories = explode("/", $_GET["catstr"]);
print_r($categories);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多