需要在Apache中静默重写URL吗
我在apache后面运行tomcat。现在,我需要通过从url中删除参数名称来应用友好url。 我想要 其给定资源未找到异常(404) 因此,为了进行测试,我将我的友好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
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]
请注意,这似乎不适用于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]