默认情况下,服务器会将键入example.com/folder的用户重定向到example.com/folder /
有没有办法改变它(例如当他们转到example.com/folder重定向到otherexample.com/folder/时)。但这必须影响所有文件夹但排除根目录。当键入example.com/folder /.
时,代码也应该不执行任何操作修改
此外,代码不应影响图像和所有其他文件(或者更好的说,如果请求的文档有文件扩展名),只是文件夹。
示例:
should affect : example.com/folder
: example.com/folder/folder
but should not : example.com
: example.com/forum (but only forum, only this folder)
: example.com/folder/
: example.com/folder/.
: example.com/folder/folder/
: example.com/image.png
: example.com/something.something
: example.com/something.
: example.com/.something
修改
另一个编辑: 假设我们找到了.htaccess代码(下面的第一个答案)。我如何使其适用于我的所有域名和网站期望我的博客(example.com/blog),我不希望重定向像我的整个网站?
答案 0 :(得分:7)
默认情况下,服务器会将键入example.com/folder的用户重定向到 example.com/folder /
由mod_dir完成的,有几个很好的理由,所有这些都在DirectorySlash文档中进行了解释。您可以使用DirectorySlash Off
关闭此行为,但这样做通常不是一个好主意,除非您有非常好的和有效的理由这样做。
但是,话虽如此,您在问题中描述的内容只能由mod_rewrite处理。首先,您需要检查所请求的资源是否是目录。它必须是DocumentRoot
内的物理目录。
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
同样适用%{DOCUMENT_ROOT}
至关重要,否则目录检查不会起作用。
' -d' (是目录)
将TestString视为路径名并测试它是否存在,并且是一个目录。
其次,您需要忽略对实际具有尾部斜杠的目录的所有请求。
RewriteCond %{REQUEST_URI} !/$
现在,您已经过滤到了要重定向到另一个域的资源:没有尾部斜杠的目录。其他所有(带有斜杠,图像等的目录)此时甚至不在游戏中。实际重定向的时间。
RewriteRule ^ http://other.com%{REQUEST_URI}/ [redirect=temp,last]
您可能希望稍后改变主意,因此您应该使用临时重定向(a.k.a。302 Found)而不是永久重定向(a.k.a。301 Moved Permanently)。 last
告诉mod_rewrite停止所有进一步处理。
这是最终产品:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^ http://other.com%{REQUEST_URI}/ [redirect=temp,last]
答案 1 :(得分:4)
怎么样?
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://otherexample.com/$1/ [L,R=301]
答案 2 :(得分:1)
# This allows you to redirect your entire website to any other domain
Redirect 301 / http://mt-example.com/
# This allows you to redirect your entire website to any other domain
Redirect 302 / http://mt-example.com/
# This allows you to redirect index.html to a specific subfolder
Redirect /index.html http://example.com/newdirectory/
# Redirect old file path to new file path
Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html
# Provide Specific Index Page (Set the default handler)
DirectoryIndex index.html
答案 3 :(得分:1)
希望这是你需要的
Redirect 301 /directory http://www.newdomain.com
只需使用您的文件夹名称
更改目录答案 4 :(得分:1)
对于:www.newdomain.com
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !newdomain.com$ [NC]
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [L,R=301]
对于:olddomain.com到newdomain.com
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !newdomain.com$ [NC]
RewriteRule ^(.*)$ http://newdomain.com/$1 [L,R=301]