URL重写以删除尾随文件夹名称

时间:2014-10-12 07:25:05

标签: .htaccess url mod-rewrite url-rewriting

我们有一台服务器,在/ 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代码

2 个答案:

答案 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]