将(htaccess)example.com/myproject重定向到另一个子文件夹,但保留原始网址

时间:2017-04-06 18:40:41

标签: apache .htaccess redirect mod-rewrite

也许有人可以提供帮助。我尝试重定向:

www.example.com/myproject

www.example.com/projects/myproject

但我希望保留原始网址。

我当前的文件树:

“/”webspace root

“/ sites”通过输入www.example.com

来调用此目录

“/ sites / projects / myproject”在此文件夹中我想在用户输入网址“www.example.com/myproject”时重定向用户

我尝试了什么

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com/myproject$ [NC]
RewriteRule ^ http://example.com/projects/myproject%{REQUEST_URI} [R=301,L]

如果我打电话给“http://example.com/projects/myproject”它会起作用。但不是“http://example.com/myproject”。

Paramters也应该使用原始网址,例如“?site = register”或类似名称。

修改

我现在找到了一个解决方案:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^myproject/?$ /projects/myproject/%1 [QSA,L]
</IfModule>

这样可以正常工作并保留原始网址。

一件事。是否可以匹配文件调用?的意思是:

工作网址:example.com/projects/myproject/css/main.css 想要使用上述RewriteCondition的URL:example.com/myproject/css/main.css

目前它只向我显示index.php,但在URL中也会显示“/myproject/css/main.css”。我想打电话给这个档案。同样适用于js,pdf,less等等。

1 个答案:

答案 0 :(得分:0)

%{HTTP_HOST}仅包含主机名,而不是REQUEST_URI,因此您无法测试其中是否存在myproject

我想这样的事情就足够了:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^myproject/(.+) /projects/myproject/%1 [R=301,L,QSA]