.htaccess使用无限参数重写规则
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.htaccess使用无限参数重写规则相关的知识,希望对你有一定的参考价值。
我无法解决如何在.htaccess中创建RewriteRule以接受友好URL的无限参数的问题。现在,我的.htaccess文件如下所示:
RewriteRule "^category/([a-z0-9-]+)/?$" "category.php?cat1=$1" [NC,L]
RewriteRule "^category/([a-z0-9-]+)/([a-z0-9-]+)/?$" "category.php?cat1=$1&cat2=$2" [NC,L]
RewriteRule "^category/([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)/?$" "category.php?cat1=$1&cat2=$2&cat3=$3" [NC,L]
我有同样的行重复约10次接受10个不同的类别。有没有更简单的方法来实现这一目标?在此先感谢您的帮助!
这不是你的问题的直接答案,这里是使用RewriteRule和.htaccess的替代方法(其中IMO更像是实现你想要的最佳方式)。
首先,如果可能的话,你应该支持在.htaccess文件上使用apache服务器配置文件。使用.htaccess会产生性能问题以及潜在的安全问题。这在互联网上有很好的记录,所以我不会在这里重复,但快速谷歌搜索应提供更多信息。
其次,不是使用RewriteRule,更可扩展的解决方案是使用FallbackResource和路由器文件。
我们的想法是,如果您的站点有任何请求与任何现有文件不匹配,请求将由您的FallbackResource文件处理。
如果在你的配置(或htaccess)中你有
FallbackResource router.php
并且有人请求example.com/category/potato
请求将导致服务器服务router.php
(假设类别/土豆实际上不是您服务器上的文件)
那么router.php
会发生什么?当然,您无法在同一页面上为每个请求提供服务,因此您需要检查所做请求的详细信息,然后相应地提供正确的内容。
一个非常简单(和未经测试)的路由器:
$request_uri = $_SERVER['REQUEST_URI']; // eg /category/potato
$path_tokens = explode("/", trim($request_uri, "/"));
if($path_tokens[0] == "category"){
$category = $path_tokens[1];
renderCategoryPage($category); // can render the category page for potatoes
}
这个例子只是为了给你一个想法,你将不得不设计和实现自己的想法,但希望你能看到这给了一些英国人重写规则更多的自由。
以上是关于.htaccess使用无限参数重写规则的主要内容,如果未能解决你的问题,请参考以下文章