【问题标题】:mod redirect rulemod重定向规则
【发布时间】:2012-07-03 12:01:48
【问题描述】:

我只想通过 mod rewrite 规则重定向 URL。我已应用此规则,不包括 (R=301)

示例: 从 http:///webapp/wcs/stores/servlet/en/marksandspencer 到 http:///en/marksandspencer


我正在将此规则用于 mod 重定向规则。

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^(/)?$ 
RewriteCond %{REQUEST_URI} !^/webapp.*$ 
RewriteCond %{REQUEST_URI} !^/wcsstore.*$ 
RewriteRule ^/(.*)$ /webapp/wcs/stores/servlet/$1 [PT,NC,L,QSA] 
RewriteRule ^/webapp/wcs/stores/servlet/(.*) /$1 [NE,L,QSA] 
RewriteRule ^(/)?$ /webapp/wcs/stores/servlet/en/marksandspencer [PT,NC,L]

【问题讨论】:

  • 我正在将此规则用于 mod 重定向规则。 RewriteCond %{REQUEST_URI} !^(/)?$ RewriteCond %{REQUEST_URI} !^/webapp.*$ RewriteCond %{REQUEST_URI} !^/wcsstore.*$ RewriteRule ^/(.*)$ /webapp/wcs /stores/servlet/$1 [PT,NC,L,QSA] 重写规则 ^/webapp/wcs/stores/servlet/(.*) /$1 [NE,L,QSA] 重写规则 ^(/)?$ /webapp/wcs /stores/servlet/en/marksandspencer [PT,NC,L]

标签: apache .htaccess redirect


【解决方案1】:

不知道您要做什么,但如果您使用的是 Apache 2.0 或更高版本,则在 RewriteRule 内进行匹配时,前导斜杠会从 URI 中去除。此外,您有一条规则,看起来像是在 URI 的开头添加了 /webapp/wcs/stores/servlet/,然后下一条规则看起来像是要删除它。这可能会导致循环。

大胆猜测您要做什么,我认为您需要在第二条规则中添加一个条件,并删除前导斜杠:

# internally rewrite URI by appending "/webapp/wcs/stores/servlet/" to the front
RewriteCond %{REQUEST_URI} !^(/)?$ 
RewriteCond %{REQUEST_URI} !^/webapp.*$ 
RewriteCond %{REQUEST_URI} !^/wcsstore.*$ 
RewriteRule ^(.*)$ /webapp/wcs/stores/servlet/$1 [PT,NC,L,QSA] 

# if a request is made with "/webapp/wcs/stores/servlet/" in it, redirect to a URI with it stripped
RewriteCond %{THE_REQUEST} ^(GET/POST)\ /webapp/wcs/stores/servlet/
RewriteRule ^webapp/wcs/stores/servlet/(.*) /$1 [R=301,L,QSA] 

RewriteRule ^$ /webapp/wcs/stores/servlet/en/marksandspencer [PT,NC,L]

【讨论】:

  • 问题是如果我使用重定向标志 R=301 那么发布请求不起作用。但我需要 POST 和 GET 请求。所以我可以这样做。 RewriteRule ^/webapp/wcs/stores/servlet/(.*) /$1 [R=301,E,L,QSA]
  • RewriteEngine on RewriteCond %{REQUEST_URI} !^(/)?$ RewriteCond %{REQUEST_URI} !^/webapp.*$ RewriteCond %{REQUEST_URI} !^/wcsstore.*$ RewriteRule ^/( .*)$ /webapp/wcs/stores/servlet/$1 [PT,NC,L,QSA] 重写规则 ^/webapp/wcs/stores/servlet/(.*) /$1 [R=301,NE,L,QSA ] RewriteRule ^(/)?$ /webapp/wcs/stores/servlet/en/marksandspencer [PT,NC,L] 现在的 URL 从 http:///webapp/wcs/stores/servlet/en/marksandspencer 到http:///en/marksandspencer。如果我使用此规则,那么它适用于 get 请求,但不适用于 post 请求。那么我怎样才能同时实现。
  • 你不能像那样重定向 POST 请求。
猜你喜欢
  • 1970-01-01
  • 2010-11-13
  • 2012-05-13
  • 1970-01-01
  • 2012-06-14
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多