Htaccess将ID查询字符串URL重定向到用户友好URL

时间:2015-10-29 17:13:37

标签: .htaccess mod-rewrite redirect

我正在尝试将包含ID querty字符串的页面重定向到用户友好的URL。我有这样的多个页面,我需要在htaccess文件中重定向。以下是我尝试重定向的其中一个页面的示例:

旧网址: examplepage.com/about_news_info.aspx?id=275

重定向到

新网址: examplepage.com/news-events/

这就是我正在使用的运气:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=275$
RewriteRule ^/about_news_info.aspx http://examplepage.com/news-events/test1 [L,R=301]

RewriteCond %{QUERY_STRING} ^cateid=373$
RewriteRule ^/about_news.aspx http://examplepage.com/news-events/test2 [L,R=301]

2 个答案:

答案 0 :(得分:1)

.htaccess是per directory上下文vs将它放在配置文件中,因此您的模式不匹配。

来自文档:

  

在.htaccess文件中使用重写引擎时,每个目录   前缀(对于特定目录始终是相同的)是   自动删除RewriteRule模式匹配和   在任何亲戚之后自动添加(不是以斜线或   协议名称)替换遇到规则集的结尾。见   有关前缀的更多信息,请参阅RewriteBase指令   被加回到相对替代。

     

删除的前缀始终以斜杠结尾,表示匹配   针对从不具有前导斜杠的字符串发生。的因此,   带有^ /模式的模式在每个目录上下文中匹配。

因此,您的规则应该如此,而不是 RewriteRule中的前导/

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=275$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^about_news_info.aspx http://examplepage.com/news-events/test1 [L,R=301]

RewriteCond %{QUERY_STRING} ^cateid=373$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^about_news.aspx http://examplepage.com/news-events/test2 [L,R=301]

不检查确实不需要的查询字符串。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^about_news_info.aspx$ http://examplepage.com/news-events/test1? [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^about_news.aspx$ http://examplepage.com/news-events/test2? [L,R=301]

答案 1 :(得分:0)

RewriteEngine On

RewriteCond %{QUERY_STRING} ^id=275$
RewriteRule ^about_news_info.aspx$ http://examplepage.com/news-events/test1? [L,R=301]

RewriteCond %{QUERY_STRING} ^cateid=373$
RewriteRule ^about_news.aspx$ http://examplepage.com/news-events/test2? [L,R=301]