我想要 mod_rewrite 这样做:
http://server/*
-> 重定向至http://server/app/*
http://server/app/*
不应被重定向。http://server.domain/*
-> 重定向至http://server/app/*
http://server.domain/app*
-> 重定向至http://server/app/*
它必须与 mod_jk 一起工作!
编辑:这是最终的解决方案
# force use of host 'server'
RewriteCond %{HTTP_HOST} !^server$
RewriteRule ^(.*)$ server$1 [R,NE,L]
# prepend /app to URL if missing
RewriteCond %{request_uri} !^/app.*?
RewriteRule ^(.+?)$ app/$1 [R,NE,L]
感谢你,fahadsadah 和 Insanity5902!我犹豫着是否要将你们中的任何一个人标记为“正确”,因为你们都提供了宝贵的意见,构成了最终的解决方案。
答案1
使用以下配置指令(您可能希望将它们添加到您的.htaccess
文件中):
RewriteEngine on
RewriteCond %{request_uri} !^/prepended
RewriteRule ^(.+?)$ prepended/$1
答案2
这应该更好
RewriteEngine On
RewriteCond %{HTTP_HOST} !^server$ [NC]
RewriteRule ^(.*)$ http://server/$1
RewriteRule ^$ /app
这是我突然想到的,但是应该发生。请求进入,如果它不使用服务器主机名,则它将重定向到http://服务器保持 URI 字段的其余部分不变。然后它将再次重新处理规则,跳过第一个规则(因为 RewriteCond 为 false),然后处理 RewriteRule。也就是说,如果 URI 为空,则将其发送到 /app。如果 URI 不是空的,它将使用已经存在的内容。
因此,除了您已有的功能之外,它还应能够
http://server/foo -> http://server/foo
http://server.domain/foo -> http://server/foo
让我知道它是如何工作的,在我看来它似乎工作正常:)