我正在尝试将包含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]
答案 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]