1

下面的 mod 重写不起作用.. 例如,使用http://www.mywebsite.com/category/general之类的 url .. 我收到 404 错误。

RewriteEngine On
RewriteBase /
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)&g=([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type=$2&r=$3&g=$4&page=$5 [L]

如果我使用下面的 mod rewrite 它可以工作,难道不应该有更好的方法而不是必须输入所有组合。

RewriteRule ^category/([A-Za-z0-9-]+)/?$ /category.php?c=$1 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type=$2 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&page=$2 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type=$2&page=$3 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)/?$ /category.php?c=$1&r=$2 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type$2&r=$3 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&r=$2&page=$3 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)&g=([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type=$2&r=$3&g=$4&page=$5 [L]
4

1 回答 1

1

您的第一个规则集要求每个参数都存在,因此它永远不会在您的示例 URL 上触发。第二个规则集似乎正在处理您的示例,因为您的第一个规则处理“在 'category/' 之后只有一个单词”的情况。

如果您想要一个规则,请尝试:

RewriteEngine On
RewriteBase /
RewriteRule ^category/([A-Za-z0-9-]+)(&type=([A-Za-z0-9-]+))?(&r=([A-Za-z0-9-]+))?(&g=([A-Za-z0-9-]+))?(&page=([A-Za-z0-9-]+))?/?$ /category.php?c=$1&type=$3&r=$5&g=$7&page=$9 [L]

或者,由于参数似乎都直接映射:

RewriteEngine On
RewriteBase /
RewriteRule ^category/([A-Za-z0-9-]+)(&type=[A-Za-z0-9-]+)?(&r=[A-Za-z0-9-]+)?(&g=[A-Za-z0-9-]+)?(&page=[A-Za-z0-9-]+)?/?$ /category.php?c=$1&type=$2&r=$3&g=$4&page=$5 [L]

两者都假设a)您将始终在“类别/”之后拥有第一位,并且b)其余选项可以混合和匹配,但始终保持相同的顺序。第二个更好,因为这意味着您可以在将来根据需要扩展它 - 第一个已用完反向引用(它使用 9 美元)。

于 2012-05-19T14:22:02.933 回答