基于表单输入的URL重写

问题描述

| 我正在使用一个表单和一个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 \”的控制器。     

解决方法

我对CodeIgniter不熟悉,但是您可以尝试以下
RewriteRule
RewriteEngine on
RewriteCond %{REQUEST_URI}  ^\\/go\\/
RewriteCond %{QUERY_STRING} id=([^&]*)
RewriteRule (.*) /go/%1? [L,R]
%1
引用前一个
RewriteCond
中的正则表达式组,后跟
?
将从重定向的URL中删除查询字符串。 希望这可以帮助。     ,Mod_rewrite支持RegEx的条件和规则,因此您可以拥有一个与ѭ8匹配的规则,该规则将从URL中提取(保留其他参数),并相应地重写URL。 但是...我认为您不希望这样做,因为如果将URL重写为
/go/Some+Search+Query
,则必须手动解析URL,否则将无法使用PHP来获取它。 具有用户输入的自定义SEO友好URL确实很困难,但从技术上讲是可行的。您最好不要使用
?id=XXX
部分,而是以相反的方式使用mod_rewrite ...将所有与格式
/go/My+Search+Terms
匹配的URL转换回类似
?id=My+Search+Terms
的方式,这样您就可以使用URL的GET参数轻松解析出该值。这并非不常见的作法-Google实际上仍然使用URL参数进行用户输入(示例URL ::13ѭ)。 请记住,mod_rewrite会先重写URL(甚至包括PHP),因此对您需要处理的URL进行任何操作。每次在服务器上调用页面时,请将mod_rewrite视为基于正则表达式的URL全局\“查找并替换\”。例如,如果删除查询字符串,则需要确保您的网站/应用程序/对此负责。     ,在
application/config/routes.php
$route[\'go/(:any)\'] = \"go/index/$1\";
其中“ 16”是您的控制器,而“ 17”是索引操作。 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]