URL重写基于表单输入

时间:2011-04-12 18:07:23

标签: .htaccess codeigniter url-rewriting

我正在为我的网站创建一个首页,其中包含单一表单和输入文字,Google风格。它工作正常,但是,我想根据输入生成一个漂亮的URL。比方说,我的输入被称为“id”,并且使用表单的GET方法,以及在提交时定义为“/ go /”的操作,URL将是:

site.com/go/?id=whateverIType

我希望将其更改为

site.com/go/whateverIType

我正在考虑使用Mod Rewrite,但是如果用户在URL中添加了某些内容,例如:

site.com/go/?dontwant=this&id=whateverIType&somemore=trash

我想忽略其他变量而忽略“id”,并重写规则。

完成这项工作的更好方法是什么?提前谢谢!

PS:我正在使用CodeIgniter,也许我可以使用它。我已经有了“go”的控制器。

3 个答案:

答案 0 :(得分:1)

我不熟悉CodeIgniter,但您可以尝试以下RewriteRule

RewriteEngine on
RewriteCond %{REQUEST_URI}  ^\/go\/
RewriteCond %{QUERY_STRING} id=([^&]*)
RewriteRule (.*) /go/%1? [L,R]

%1引用上一个RewriteCond中的regex组,尾随?将从重定向的URL中删除查询字符串。

希望这有帮助。

答案 1 :(得分:1)

Mod_rewrite使用RegEx支持conditionsrules,因此您可以拥有与?id=XXXX匹配的规则,该规则会从URL中提取它(保留其他参数) ),并相应地重写了URL。

但是......我认为你不想这样做,因为如果你把URL重写为/go/Some+Search+Query,你就不能用PHP来解决它,而不用解析手动输出网址。

使用用户输入提供自定义,SEO友好的URL非常困难,但技术上可行。你最好离开?id=XXX部分,而是在相反的方法中使用mod_rewrite ...获取与模式/go/My+Search+Terms匹配的所有网址并将其转换回?id=My+Search+Terms之类的内容这样,您就可以使用URL的GET参数轻松解析值。这不是一种罕见的做法 - 谷歌实际上仍然使用URL参数进行用户输入(例如URL:http://www.google.com/search?q=test)。

请记住,mod_rewrite会在其他任何内容(甚至是PHP)之前重写URL,因此您需要对要处理的URL执行任何操作。每次在服务器上调用页面时,都会将mod_rewrite视为基于正则表达式的全局“查找和替换”URL。例如,如果您删除查询字符串,则需要确保您的网站/应用程序/无论如何。

答案 2 :(得分:1)

application/config/routes.php

$route['go/(:any)'] = "go/index/$1";

go是您的控制器,index是索引操作。

http://codeigniter.com/user_guide/general/routing.html

如果您还没有.htaccess,可以使用以下内容:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]