我想通过.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
文件中添加什么?
答案 0 :(得分:1)
RewriteCond %{QUERY_STRING} ^pages/oldpage$
RewriteRule ^index\.php /newpage [QSD]
RewriteCond
捕获查询字符串,从开始到结束仅将其与pages/oldpage
匹配。 RewriteRule
来匹配REQUEST_URI
中index.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
再次感谢大家的帮助