Apache mod_rewrite 教程

Apache mod_rewrite 教程

我想要 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

让我知道它是如何工作的,在我看来它似乎工作正常:)

相关内容