httpd重定向与重写和条件不按预期工作
问题描述:
我遇到了我的Apache重定向和重写的问题,我不知道为什么我没有工作。这是我们的目标:httpd重定向与重写和条件不按预期工作
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$1
RewriteCond %{REQUEST_URI} !^/en/
RewriteRule ^(.*)$ /en/$1 [L,QSA]
随着最后两行(条件和规则)在内,我的浏览器不得到一301重定向,只有404。如果我拿出最后两行,重定向发生 - 但是我显然没有像我需要的那样从/ en /目录中提供文件。
不应该发生重定向,导致一个新的请求没有得到重定向,其次是应用重写?
此外,我有更多的这些RedirectMatch行在那里(相关之后),但为了简化我的示例,我删除了它们。
答
对于简单的重定向总是去重定向,但是如果你需要使用mod_rewrite,最好坚持下去,就是混合重定向和重写会导致混淆,就像这个实际情况一样。
正在发生的事情是重写首先发生的事情,都你重写指令和redirectmatch申请过同样的事情(原籍不在/结束/,定义重定向先不让它第一次发生。
什么你要的是描述你想要的东西,将在顺序进入:
RewriteRule ^/app-gallery(.*) /apps$1 [R=301]
RewriteRule ^/(?!en)(.*) /en/$1 [L,QSA]
这重定向您要选择的顺序
如果最终目标是在文件系统中,你可以尝试使用重定向和别名与我相信这样的,但我不知道这一点,因为我不知道你的设置不够好:
Redirect permanent /app-gallery/ /apps/
AliasMatch ^/apps/(.*) /filesystem/path/to/apps/$1
谢谢 - 这很有道理。无论出于何种原因,R = 301 RewriteRule实际上并没有为我做重定向 - 这就是我发现RedirectMatch的原因。我使用了一个在线htaccess测试仪,它说他们应该重定向,所以我不得不多看看它。谢谢! – jcovert