如何确保始终只使用干净的URL?

时间:2011-05-17 09:57:03

标签: php .htaccess

如果网址看起来像mysite.com/index.php?myparam=test

,我的网站会做一些事情

在.htaccess中,我添加了以下行:

#RewriteRule ^([a-z]+)$ /index.php?myparam=$1 [L]

哪个效果很好! URL mysite.com/test将相应地重定向,一切正常

我想摆脱脏URL,以便如果有人手动输入mysite.com/index.php?myparam=test,他将被重定向到mysite.com/test并且仍然有效,而不会进入无限环..

2 个答案:

答案 0 :(得分:0)

如果你想到了“路由”,你有机制将参数转换为URL并从输入的URL中获取执行参数,如果有人手动输入执行参数,你可以将他重定向到你从路由机制获得的URL。 / p>

有关symfony 1.4框架中路由机制的一些信息:

http://www.symfony-project.org/jobeet/1_4/Doctrine/en/05

我已经在几个小时内为我的大学项目写了一个路由机制,所以可以有一个。如果没有,最受欢迎的[恕我直言]路由库是部落:

http://dev.horde.org/routes/

答案 1 :(得分:0)

在网上进一步阅读之后好了,感谢Salman的回复,我找到了问题的答案:)

下面的代码将重写脏网址来清理一个...

  

RewriteCond%{THE_REQUEST} ^。 \?myparam =([a-zA-Z] +)。

     

RewriteRule ^(。*)$ /%1? [R = 301,L]

请注意'/%1'后面的问号非常重要,因为将它放在那里(在重定向目标上)将清除查询字符串。

之后,下面的代码会将干净的网址重定向到脏网,而不会更改网址(仍然保持干净)

  

RewriteRule ^([a-zA-Z] +)$ /index.php?myparam=$1 [L]

这不会导致无限循环,因为使用了THE_REQUEST,它只会响应您的请求而不是服务器端重定向(我认为)

您可能需要阅读mod_rewrite语法指南,以根据自己的需要进行自定义..