我在一个平台上工作,最近遇到了如何重写链接的问题。 首先,我想给你一个例子:
让我们说这是原始链接:
category.php?_uri =类别/子类别/ subcategory2 ...
重写结构是:
domain_path /类别/子类别/ subcategory2 ...
从我看到的大多数主要平台链接都是这样编写的,我的问题是如何使类似的东西?
在我尝试逻辑思考之后,我们得到了类似的东西:
的.htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ category.php?_uri=$1 [L,QSA]
我想与之合作:
$_SERVER["REQUEST_URI"]
但是我不明白如何检查是类别还是文章(因为文章我想使用相同的结构ex:domain_path / article_name)......哪种方法可以调用内容?
答案 0 :(得分:0)
我建议你这样做
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(\/([^/]+))?(\/([^/]+))?$
category.php?category=$1&subcat1=$2&subcat2=$3 [L,QSA]
访问/foo/bar/baz
等网址时,您将拥有
$_GET['category'] = foo
$_GET['subcat1'] = bar
$_GET['subcat2'] = baz
答案 1 :(得分:0)
通常,您在RewriteRule
文件中捕获带有.htaccess
的网址,如上所述,然后使用PHP解析它。使用上面的内容,它会在$_SERVER['REQUEST_URI']
变量中,然后您可以开始对其进行操作:
<?php
$url_parts = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
?>
然后,上面会给你一个URL段的数组,在每个正斜杠上分开。你如何解析你的URL取决于你。
通过区分目录页面和说,文章或CMS页面(我认为这是您正在遇到的问题),您可以通过多种方式进行讨论。就个人而言,我通过使用第一个URL段来区分内容。因此可能是/articles
或/products
,依此类推。
<?php
$url_parts = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
switch ($url_parts[0]) {
case 'articles':
// continue parsing the remaining URL parts as article parameters
list($articles, $year, $month, $day, $slug) = $url_parts;
break;
case 'products':
// continue parsing the remaining URL parts as product parameters
list($products, $category, $subcategory, $slug) = $url_parts;
break;
// and so on...
}
?>
答案 2 :(得分:0)
如果您使用category.php
和article.php
,则可以执行此类操作
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^category.*$
RewriteRule ^(.*)$ category.php?_uri=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^article.*$
RewriteRule ^(.*)$ article.php?_uri=$1 [L,QSA]
最好的方法是通过像这样的单一前控制器
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
然后,您需要在配置中定义路径并检查所请求的URL(来自$_SERVER['REQUEST_URI']
)。
您可以查看Zend_Router
的工作原理并遵循类似的模式