mod_rewrite在子域中用下划线替换破折号,然后重定向

时间:2013-03-15 08:17:11

标签: .htaccess mod-rewrite

这是我想要做的:

  • 我想用下划线(_)替换所有破折号( - ),但仅在子域中替换。
  • 在替换所有短划线后,我想重定向到具有重写子域名称的子目录

例如: http://subdomain-with-dashes.rotarytest.de/a-directory/an-image.png 重写后应该是 http://rotarytest.de/subdomain_with_dashes/a-directory/an-image.png

以下是我现在的情况,请参阅代码中的注释

RewriteEngine on

# replace dashes with underscores
# this works, but only for the last dash
RewriteCond %{HTTP_HOST} ^(.*)-(.*)$
RewriteRule ^(.*)$ http://%1_%2/$1 [L,R=301]


# if a subdomain is called, redirect to subdirectory
# this code works but only when i have one dash in my subdomain
RewriteCond %{HTTP_HOST} ^(.*)\.rotarytest\.de$
RewriteRule ^(.*)$ http://rotarytest.de/%1%{REQUEST_URI} [L,R=301]

我尝试了几乎所有在stackoverflow或网络上找到的解决方案,但没有一个能正常工作。

有人可以帮帮我吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您必须允许浏览器不断重定向以删除破折号。如果您不需要在URI中使用下划线替换短划线,那么您不需要前两个规则,它们不会应用于主机名。用这个替换前两个规则:

RewriteCond %{HTTP_HOST} ^(.*)-(.*)$
RewriteRule ^(.*)$ http://%1_%2/$1 [L,R=301]