需要在Apache中静默重写URL吗

需要在Apache中静默重写URL吗,apache,mod-rewrite,url-rewriting,friendly-url,Apache,Mod Rewrite,Url Rewriting,Friendly Url,我在apache后面运行tomcat。现在,我需要通过从url中删除参数名称来应用友好url。 我想要 其给定资源未找到异常(404) 因此,为了进行测试,我将我的友好url更改为http:////u=QWERTY并尝试过 RewriteRule ^/APPLICATION/u=(.*)$ /APPLICATION/?vid=$1 [L] 但这也会导致tomcat中出现404。删除R=301,因为它正在将浏览器移动到新地址 你可以简化: RewriteEngine On Rewrit

我在apache后面运行tomcat。现在,我需要通过从url中删除参数名称来应用友好url。 我想要

其给定资源未找到异常(404)

因此,为了进行测试,我将我的友好url更改为
http:////u=QWERTY
并尝试过

    RewriteRule ^/APPLICATION/u=(.*)$ /APPLICATION/?vid=$1 [L] 

但这也会导致tomcat中出现404。

删除
R=301
,因为它正在将浏览器移动到新地址

你可以简化:

RewriteEngine On
RewriteCond %{QUERY_STRING} !vid=
RewriteCond %{REQUEST_URI} !/assets/
RewriteRule ^/APPLICATION/(.*)$ APPLICATION/?vid=$1 [L]
如果右侧没有
/
,htaccess流将不会重新启动


assets
部分仅用于
/APPLICATION/assets/
,而不仅仅是
/assets/
,我已经从末尾删除了
$
,因为它限制了与普通目录调用的匹配

如果您想要静默重写(地址栏中的URL不变),则需要使用,而不是[R=301,L]

基本上,请求被交给代理服务器,因此客户端永远看不到任何更改

您不希望客户端,尤其是搜索引擎机器人,执行永久重定向,因此您不希望[R=301]

[p]标志包含一个隐含的(最后一个命令),因此您希望确保它们出现在以下任何一个命令之后:

  • 坠落式重写(如删除www)作为永久重定向完成,带有[R=301]标志,但没有[L]

  • 禁止重写,如图像出血保护,是在这些之前完成的,因为它还包括一个隐含的[L]

正如apache文档中的[p]标志描述所述,使RewriteCond语句的regexp特定于处理的输入,并明确指定目标URL,以便恶意或错误的用户输入不会创建不正确的URL

请注意,[p]标志阻止连接池(使用默认工作线程),因此不存在持久连接,可能会导致性能损失


请注意,这似乎不适用于https站点,因此必须使用[L]标志而不是[p]标志,而无需静默重定向。真倒霉

从rightpart中删除/将导致Apache中出现“错误请求”错误。所以我试着不删除右边的斜杠(/)。现在Tomcat应用程序中出现404(未找到资源)错误。在Firebug newtowk跟踪中,每个红色(404)请求也尝试使用文件路径:
RewriteRule^/APPLICATION/(.*)$APPLICATION/index.jsp?vid=$1[L]
<IfModule rewrite_module>
 RewriteEngine On    
   RewriteCond %{QUERY_STRING} !vid=(.*)$ [NC] 
   RewriteCond %{REQUEST_URI} !/assets/$ [NC]   
   RewriteRule ^/APPLICATION/(.*)$ /APPLICATION/?vid=$1 [R=301,L]    
</IfModule>
   RewriteCond %{QUERY_STRING} !vid= [NC] 
   RewriteCond %{REQUEST_URI} !/assets/ [NC]   
   RewriteRule ^/APPLICATION/(.*)$ /APPLICATION/?vid=$1 [L] 
    RewriteRule ^/APPLICATION/u=(.*)$ /APPLICATION/?vid=$1 [L] 
RewriteEngine On
RewriteCond %{QUERY_STRING} !vid=
RewriteCond %{REQUEST_URI} !/assets/
RewriteRule ^/APPLICATION/(.*)$ APPLICATION/?vid=$1 [L]