重写的 httpd 重定向和条件未按预期工作
httpd redirect with rewrite and condition not working as expected
我在使用 Apache 重定向和重写时遇到问题,我不知道为什么我得到的东西不起作用。这是目标:
Browser URL: http://127.0.0.1/app-gallery/all
Redirect (301) to: http://127.0.0.1/apps/all
Serve file from: /en/apps/all
在我的 httpd.conf 中,我有以下内容:
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RedirectMatch 301 ^/app-gallery(.*) /apps
RewriteCond %{REQUEST_URI} !^/en/
RewriteRule ^(.*)$ /en/ [L,QSA]
包含最后两行(条件和规则)后,我的浏览器不会得到 301 重定向,只有 404。如果我去掉最后两行,重定向发生了 - 但我显然没有像我需要的那样从 /en/ 目录提供文件。
不应该发生重定向,导致新请求未被重定向,然后应用重写吗?
此外,我还有很多这样的 RedirectMatch 行(在相关行之后),但为了简化我的示例,我删除了它们。
对于简单的重定向总是使用重定向,但是如果你需要使用mod_rewrite,最好坚持使用它,也就是说,混合重定向和重写会造成混淆,就像这个实际案例。
发生的事情是 Rewrite 首先发生,并且您的 rewrite 指令和重定向匹配都适用于同一事物(两个原点都不是 /end/,首先定义重定向不会使其首先发生。
您想要的是描述将按照您想要的顺序进行的内容:
RewriteRule ^/app-gallery(.*) /apps [R=301]
RewriteRule ^/(?!en)(.*) /en/ [L,QSA]
这会按照您想要的优先顺序进行重定向。
如果最终目的地在文件系统中,您可以尝试使用重定向和别名,我相信是这样的,但我不确定这一点,因为我不太了解您的设置:
Redirect permanent /app-gallery/ /apps/
AliasMatch ^/apps/(.*) /filesystem/path/to/apps/
我在使用 Apache 重定向和重写时遇到问题,我不知道为什么我得到的东西不起作用。这是目标:
Browser URL: http://127.0.0.1/app-gallery/all
Redirect (301) to: http://127.0.0.1/apps/all
Serve file from: /en/apps/all
在我的 httpd.conf 中,我有以下内容:
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RedirectMatch 301 ^/app-gallery(.*) /apps
RewriteCond %{REQUEST_URI} !^/en/
RewriteRule ^(.*)$ /en/ [L,QSA]
包含最后两行(条件和规则)后,我的浏览器不会得到 301 重定向,只有 404。如果我去掉最后两行,重定向发生了 - 但我显然没有像我需要的那样从 /en/ 目录提供文件。
不应该发生重定向,导致新请求未被重定向,然后应用重写吗?
此外,我还有很多这样的 RedirectMatch 行(在相关行之后),但为了简化我的示例,我删除了它们。
对于简单的重定向总是使用重定向,但是如果你需要使用mod_rewrite,最好坚持使用它,也就是说,混合重定向和重写会造成混淆,就像这个实际案例。
发生的事情是 Rewrite 首先发生,并且您的 rewrite 指令和重定向匹配都适用于同一事物(两个原点都不是 /end/,首先定义重定向不会使其首先发生。
您想要的是描述将按照您想要的顺序进行的内容:
RewriteRule ^/app-gallery(.*) /apps [R=301]
RewriteRule ^/(?!en)(.*) /en/ [L,QSA]
这会按照您想要的优先顺序进行重定向。
如果最终目的地在文件系统中,您可以尝试使用重定向和别名,我相信是这样的,但我不确定这一点,因为我不太了解您的设置:
Redirect permanent /app-gallery/ /apps/
AliasMatch ^/apps/(.*) /filesystem/path/to/apps/