在我的服务器上,我有多个域名。
RewriteEngine On
RewriteBase /
# 1. Redirect multiple domains to http://domain.de/
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.de [NC]
RewriteRule ^/?(.*) http://domain.de/$1 [L,R,NE]
# 2. Redirect all requests to /subdirectory
RewriteRule ^$ /subdirectory [L]
2.规则工作正常,但它没有隐藏url中的子目录,也没有按预期工作:http://domain.de/content/image.png
的请求返回404,因为实际文件位于{{1} }
此外,我有一些文件夹,其中的工具位于子目录http://domain.de/subdirectory/content/image.png
旁边。我想确保我仍然可以访问它们。目前正在运作。
如何确保/subdirectory
的请求有效?
http://domain.de/content/image.png
但是这只会在apache错误日志中返回错误500并带有以下条目:`由于可能的配置错误,请求超出了10个内部重定向的限制。
在Ravi Thapliyal提供的指导之后,(我猜)还有一件事:从网址中删除子目录。
RewriteCond %{REQUEST_URI} !^/subdirectory/
RewriteRule (.*) /subdirectory/$1 [L]
这是返回的内容,但我实际上想要获取html而不是位置标题,然后当然会将我从外部重定向到子目录,然后用户可以看到该子目录。它可能与子目录中的另一个.htaccess文件有关吗?
似乎问题与[user@domain html]$ curl -I domain.de/
HTTP/1.1 301 Moved Permanently
Date: Mon, 21 Oct 2013 12:42:22 GMT
Server: Apache/2.2.22 (Ubuntu)
Location: http://domain.de/subdirectory/index.php
Vary: Accept-Encoding
Content-Type: text/html
后面的typo3安装有关。接受的答案按预期工作。
答案 0 :(得分:2)
您的第一条规则应该执行外部重定向(内部更改域名根本不重要)
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.de [NC]
RewriteRule ^/?(.*)$ http://domain.de/$1 [R=301,L,NE]
您的第二条规则不是必需的。新规则也将涵盖根/
请求。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} ^/?$
RewriteCond %{REQUEST_URI} !^/subdirectory [NC]
RewriteRule ^(.*)$ /subdirectory/$1 [L]
RewriteCond
上的两个%{REQUEST_FILENAME}
会确保您可以访问-f
以外的任何文件-d
或目录/subdirectory
。
%{REQUEST_FILENAME} !-d
会阻止重定向。这样可以防止将/existing-directory
这样的网址重定向到/subdirectory/existing-directory
。
但是,这也可能会阻止根URL /
请求,这就是您收到目录索引禁止错误的原因。因此,上述条件为[OR]
并且%{REQUEST_URI} ^/?$
允许将/
重定向到/subdirectory
。