基于smarty的网站中的URL重写?

时间:2010-07-22 05:34:57

标签: url .htaccess mod-rewrite

我想实现这个目标

example.com/search_results/?action=search&username[equal]=PorscheSA

example.com/PorscheSA

我已经在许多网站上使用.htaccess来实现这一点,但由于这个网站基于智能,它似乎不起作用。任何帮助将不胜感激。

好的,这是.htaccess文件:

RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* ./index.php

为了达到以下目的,我尝试了这个:

RewriteRule ^([a-zA-Z0-9-_+^/])/$ /search_results/?action=search&username[equal]=$1

并没有发生任何事情。

1 个答案:

答案 0 :(得分:1)

关于你期望发生什么事,你的问题仍然有点模糊,但既然你已经发布了.htaccess,我会抓住它,看看我是否得到了你的意思

RewriteRule无效的最明显原因是您的测试模式与您提供的网址不匹配,因为RewriteRule需要一个尾部斜杠(和只匹配一个字符之前)。此外,如果您将其放在.htaccess文件中当前的规则之后,它将永远不会匹配,因为请求已经被重写为index.php

我认为你想要这样的东西......

Options +FollowSymlinks

RewriteEngine on

RewriteCond %{HTTP_HOST} =www.example.com [NC]
RewriteRule ^.*$ http://example.com/$0 [L,R=301]

# Make sure we end and force the redirect so %{REQUEST_FILENAME} gets changed
RewriteRule ^[a-zA-Z0-9-_+^/]+$ search_results/?action=search&username[equal]=$0 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

但是,如果search_results/目录不存在,那么无论如何这都将被重写为index.php,所以我不确定重定向的目的是什么案件。并且,如果它确实存在,因为您的测试模式几乎与我希望在站点路径中看到的任何内容相匹配,那么所有内容都将被重写到search_results/目录,因此很少(如果有的话)将会结束在您的网站根index.php

基于此,我觉得可能还有其他一些你可能遗漏的标准,但我可能错了。