如何使用问号和#标签重定向或重写URL?

时间:2019-02-10 21:45:13

标签: .htaccess url-rewriting url-redirection

我想通过.htaccess文件将以前的站点URL重定向或重写为相关的新站点URL。

由于某些其他原因,此文件已经在.htaccess文件中,如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

我想按以下方式重定向或重写:

http://www.example.com/index.php?pages/oldpage#part

http://www.example.com/newpage/

要进行重定向或重写,我不知道要在.htaccess文件中添加什么?

3 个答案:

答案 0 :(得分:1)

RewriteCond %{QUERY_STRING} ^pages/oldpage$
RewriteRule ^index\.php /newpage [QSD]
  • 使用RewriteCond捕获查询字符串,从开始到结束仅将其与pages/oldpage匹配。
  • 使用RewriteRule来匹配REQUEST_URIindex.php的{​​{1}},然后将其重定向到http://www.example.com/index.php?pages/oldpage,这实际上是/newpage丢弃的使用QSD的查询字符串。

答案 1 :(得分:0)

A1 :一个人应该可以使用常规的rewrite rules for query string

RewriteCond %{QUERY_STRING} ^pages/oldpage$
RewriteRule ^/index\.php /newpage/?

A2 #part的简短答案-不可能。但这不是因为Apache HTTPD行为。

#之后的部分在RFC 3986中称为 fragment 。用户代理(即AKA浏览器)将永远不会发送它,而您的服务器也将永远不会收到带有片段的URI / URL。

用户代理负责解析片段(RFC 3986, section 3.5):

  

为      这样,在特定于方案的方案中不使用片段标识符      URI的处理;相反,片段标识符是分开的      在取消引用之前从URI的其余部分开始,因此      片段本身中的识别信息被取消引用      仅由用户代理使用,而不考虑URI方案。

答案 2 :(得分:0)

我终于通过以后的重写解决了这个问题:

View

再次感谢大家的帮助