RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteCond %{REQUEST_URI} !^/errors/$
RewriteCond %{REQUEST_URI} !^/content/$
RewriteRule ^(.*)$ /domain/$1/ [L]
第一行和最后一行工作,它们确保来自该域的所有内容都转到该子目录。中间的两个我试图避免重定向。我需要从子目录中访问这两个文件夹,但HTTP_HOST只是将其发送回同一文件夹(错误404)。
如果它正在寻找domain.com/content/(.*)
或domain.com/content/(.*)
,我希望它忽略该规则。请注意,我无法访问服务器配置,而.htaccess是我能够做到这一点的唯一方法。
感谢。
答案 0 :(得分:3)
我建议压缩你的.htaccess代码:
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/*(domain|errors|content)/ [NC]
RewriteRule . /domain%{REQUEST_URI}/ [L]
.
需要转发为\.
[NC]
用于忽略大小写比较errors
和content
的否定URI匹配可以在单个规则中与OR |
domain
以避免无限循环答案 1 :(得分:2)
条件中的正则表达式仅匹配/errors/
完全的请求,因为您已包含字符串开头和字符串结尾锚点{{1} }和^
):
$
由于您希望条件与开始的所有请求匹配RewriteCond %{REQUEST_URI} !^/errors/$
,因此您应该在最后删除/errors/
:
$
同样明显适用于RewriteCond %{REQUEST_URI} !^/errors/
条件。