1

我正在构建一个应用程序,我想将子域“x”映射到example.com/_sub/x/但前提是文件夹“_sub”中存在文件夹“x”。如果没有,我希望显示 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>
4

1 回答 1

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>
于 2013-03-08T19:45:08.890 回答