.htaccess 将规则从“example.com/de/foo“重写为“example.de/foo“

5kgi1eie  于 2023-01-26  发布在  其他
关注(0)|答案(2)|浏览(125)

重写规则对我来说是如此的痛苦,我不能让这个工作。我必须重定向像example.com/de/anypath这样的URL到example.de/anypath
[anypath]实际上可以是任何路径,因为我必须让它在example.com/de/articles/programming/hello-world(将被重定向到example.de/articles/programming/hello-world)以及example.com/de/events/pic-nic(将被重定向到example.de/events/pic-nic)中工作。
这是我目前为止所写的:

RewriteRule "^/de/(.*)$" "http://example.de/$1" [R=301,NC,L]
  • 我也尝试了RewriteCond,但没有更多的运气
RewriteCond %{HTTP_HOST} http://example.com/de
  • 我正在使用xampp,但在我的网络服务器上测试结果相同。
  • 我知道这个.htaccess文件是工作(得到错误,如果我输入一个错字)
  • 我得到了一些测试结果,例如:
RewriteRule "^(.*)$" "https://google.com" [R=301,NC,L]

任何帮助将不胜感激!

yftpprvb

yftpprvb1#

RewriteRule "^/de/(.*)$" "http://example.de/$1" [R=301,NC,L]

.htaccess中,与RewriteRule * 模式 * 匹配的URL路径不是以斜杠开头。即,它应该是"^de/(.*)$",而不是"^/de/(.*)$"
除非还需要匹配dEEdDE,否则不需要双引号,NC标志可能是多余的。
例如(在根.htaccess文件的 * top * 附近):

RewriteRule ^de/(.*) http://example.de/$1 [R=301,L]

(HTTP,而不是HTTPS?!)
RewriteRule * 模式 * 上的尾随$也是冗余的。
首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

RewriteCond %{HTTP_HOST} http://example.com/de

Host HTTP请求头(即HTTP_HOST服务器变量的值)仅包含 * hostname *。例如,在您的示例中仅包含example.com
任何以HTTP_为前缀的服务器变量都是指同名的HTTP请求标头。
我得到了一些测试结果,例如:

RewriteRule "^(.*)$" "https://google.com" [R=301,NC,L]

测试301时要小心,因为它们是被浏览器持久缓存的。在测试之前,你需要清除浏览器缓存!

mitkmikd

mitkmikd2#

我添加了两个条件(第一个是根据本地或活动站点应用,第二个是保持节点路径不变):

RewriteCond %{HTTP_HOST} local.example.com
RewriteCond %{REQUEST_URI} !^.*/de/node/.*$

而且它正如预期的那样工作。再次感谢。

相关问题