.htaccess子文件夹中的子域

时间:2013-03-08 17:30:38

标签: .htaccess

我正在构建一个应用程序,我想将子域'x'映射到example.com/_sub/x/,但只有文件夹'x'存在于文件夹'_sub'中。如果没有,我希望example.com显示。以下工作,但仅当文件或文件夹也存在于文件夹x。

内时
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ http://example.com/_sub/%1/$1 [L]
</IfModule>

这是另一种看待它的方式。

doesNotExist.example.com -> example.com
test.example.com         -> test.example.com
example.com              -> example.com

这是我的更新代码。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

#If the file and directory exists
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC]
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/ -d
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 -f
RewriteRule ^(.*)$ http://example.com/_sub/%1/$1 [P]

#If the directory exists but the file does not
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC]
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/ -d
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 !-f
RewriteRule ^(.*)$ http://example.com/_sub/%1/404.html [P]
</IfModule>

1 个答案:

答案 0 :(得分:0)

我最初遇到的问题是通过添加第二组规则来解决,以便不将任何现有文件发送到本地404页面。一旦我弄明白这一点,我就发现一切都有效,除了没有尾随文件的链接。我只是添加了[OR]语句和后续行来解决这个问题。希望这对我所在的其他人有所帮助。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

# If the file and directory exists
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC]
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/ -d
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 -d
RewriteRule ^(.*)$ http://example.com/_sub/%1/$1 [P]

# If the directory exists but the file does not
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC]
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/ -d
RewriteCond %{DOCUMENT_ROOT}/_sub/%1/$1 !-f
RewriteRule ^(.*)$ http://example.com/_sub/%1/404.html [P]
</IfModule>