我正在使用Apache,尝试使用.htaccess将不同的域映射到不同的目录。用户在键入不同的域时访问不同的目录。我使用以下规则:
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$
RewriteCond %{REQUEST_URI} !^/domaindir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /domaindir/$1/ [L]
一切正常,除非我输入domain.com/dir(without/),浏览器将重定向到domain.com/domaindir/dir,我只想让它留在domain.com/dir中。如果我最后添加/,它将正常工作。
有谁知道如何解决这个问题?
谢谢anubhava,在使用你的代码后,我遇到了另一个问题。当我输入mydomain.com时,我会得到404,我不知道为什么它只是访问index.php而不是index.html,但如果我输入mydomain.com/dir,它可以获取index.html并且工作正常。错误日志在
之下[perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/ ->
[perdir D:/xampp/htdocs/] applying pattern '^((?!domaindir/).*?)/?$' to uri ''
[perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/ ->
[perdir D:/xampp/htdocs/] applying pattern '^((?!domaindir/).+?)/?$' to uri ''
[perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/
[perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/index.php -> index.php
[perdir D:/xampp/htdocs/] applying pattern '^((?!domaindir/).*?)/?$' to uri 'index.php'
我仍然发现留在mydomain.com/dir会导致很多文件404,我怎样才能重定向到mydomain.com/dir/,thanks。
答案 0 :(得分:0)
这是因为mod_dir
为目录添加了斜杠。
请尝试使用此代码:
DirectorySlash off
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!domaindir/).*)$ domaindir/$1 [L,NC]
# add a trailing slash now
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteCond %{THE_REQUEST} \s/+(.*?)[^/][?\s]
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]