我们有一台服务器,在/ var / www /文件夹下有几个文件夹。 我们已将域名指向服务器的IP,默认情况下,我们希望将一个文件夹作为网站加载(因为无法将文件夹指向DNS)。
我写了.htaccess,当你输入IP或域名时,请求会重定向到网站文件夹。
但是,每当我们输入IP或域名时,该文件夹的名称就会被添加到URL中。
这是现在的.htaccess:
Options +FollowSymlinks -Multiviews
#DirectoryIndex folder/
RewriteEngine on
ReWriteBase /
RewriteRule ^$ /folder [L]
RewriteRule ^$ folder/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^folder/)^(.*)$ /folder/$1 [L,NC]
文件夹是文件夹的网站 所以,
www.domain.com
变为
www.domain.com/folder /
有没有办法重写URL以删除文件夹名称?
提前致谢:)
编辑:添加.htaccess代码
答案 0 :(得分:1)
听起来你做了一个外部重定向而不是内部重写。外部重定向由[R]
标志(带有可选参数)表示,并使Apache使用客户端应请求的不同URL将301或302标头发送回客户端。这会导致客户端在地址栏中显示新的URL。
你想要的是内部重写。当您请求url时,url会在内部重写到资源实际所在的位置。您可以通过省略[R]
标志,而不是在重写的部分中使用域名来实现此目的。它通常看起来像这样:
RewriteCond %{REQUEST_URI} !^/folder
RewriteRule ^(.*)$ /folder/$1 [L]
答案 1 :(得分:1)
在DocumentRoot/.htacess
:
DirectorySlash On
Options +FollowSymlinks -MultiViews
RewriteEngine on
ReWriteBase /
# redirect /folder/abc123 to /abc123
RewriteCond %{THE_REQUEST} \s/+folder/(\S*) [NC]
RewriteRule ^ /%1 [R=301,L,NE]
# skip rewrites for real files/directories
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule !^(index\.)?$ - [L]
# route everything internally to /folder
RewriteRule ^((?!folder/).*)$ folder/$1 [L,NC]