-1

我们有一个 htaccess 文件来处理几个文件夹的漂亮链接。一些例子:

http://test.com/basecamp/en/foobar -> ../init.php?lang=en&request=foobar&site=basecamp
http://test.com/ravili/en/foobar   -> ../init.php?lang=en&request=foobar&site=ravili
http://test.com/ravili/ar/foo/bar  -> ../init.php?lang=ar&request=foo/bar&site=ravili

目录结构

/webroot
   init.php
/webroot/basecamp
   .htaccess
/webroot/ravili
   .htaccess

但是现在,我们正在尝试将文件夹移动到单独的域中,所以http://test.com/basecamp我们将拥有http://test-basecamp.com

因此.htaccess不再重定向到 webroot 中的 init.php,我们在错误日志中收到 400 Bad Request 和“Invalid URI in request GET /en/ HTTP/1.1”

.htaccess 文件

Options +FollowSymlinks
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_URI} !/(content|images|css|js|fonts|pdfs)/
RewriteRule /([^.]+\.(jpe?g|gif|bmp|png|css|js|eot|svg|ttf|ico|pdf))$ /$1 [NC,R,L]

RewriteCond %{REQUEST_URI} !(content|images|css|js|fonts|pdfs)/.*
RewriteRule !^[a-z]{2}/ /en/ [NC,L,R]

RewriteCond %{REQUEST_URI} !/(content|images|css|js|fonts|pdfs)/
RewriteRule ^([a-z]{2})/(.*)$ ../init.php?lang=$1&request=$2&site=basecamp [L,QSA]

那么我们该如何解决这个问题呢?

4

1 回答 1

1

由于您已经有一个重写基础/,因此../您的规则目标的一部分导致了 400 错误请求(因为它试图遍历文档根目录的父目录)。../从您的 RewriteRule中删除:

RewriteRule ^([a-z]{2})/(.*)$ /init.php?lang=$1&request=$2&site=basecamp [L,QSA]
于 2012-09-16T05:43:13.830 回答