htaccess - 重定向到子目录时的规范URL

时间:2014-04-23 11:51:55

标签: apache .htaccess mod-rewrite redirect

我一直在玩这个问题很长一段时间但却找不到如何达到我想要的方式。我希望用户访问我的网站test.com以访问位于子目录www immediatelly中的index.php,我可以这样做。但是当URL是test.com/www时,我希望它只是test.com。

代码片段:

.htaccess /

RewriteRule ^(.*)$ /www/$1 [L]
/ p

中的

.htaccess

RewriteCond %{REQUEST_URI} ^/www.*$
RewriteRule ^/www/(.*)$ /$1 [L]

给了我500个内部错误。

更新 由于@Justin Iurman的回答,我找到了解决方案:

/ p

中的

.htaccess

RewriteCond %{THE_REQUEST} \ /www/?(.*)\ HTTP/ [NC]
RewriteRule ^(.*)$ /%1 [R=301,L]

还有另一个问题。在服务器上,我有多个网站,我想根据root .htaccess文件中的 HTTP_HOST 变量提供文件。我将访问test.com的用户重定向到正确的目录(比如测试),但我希望URL test.com/test重定向到test.com。目录测试包含目录www,其中用户被重定向,并且由于上述解决方案,它不会粘贴到URL。我想在webserver root中编辑.htaccess文件,这样我就不会对网站有任何依赖。项目中的域名。

解决

.htaccess在webserver root中:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Redirect test.com/test (and everything into test folder) to test.com root
    RewriteCond %{HTTP_HOST} ^test\.com$ [NC]
    RewriteCond %{THE_REQUEST} \ /test/? [NC]
    RewriteRule ^.*$ / [R=301,L]

    # Forward (internally rewrite) test.com/one/example/page to test.com/test/www/one/example/page
    RewriteCond %{HTTP_HOST} ^test\.com$ [NC]
    RewriteRule ^(.*)$ /test/www/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
</IfModule>
&#34;测试&#34;

.htaccess目录:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # allow /test in URL only for certain filetypes
    RewriteRule ^(.*\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz))$ /test/www/$1 [L]

    # allow /test on localhost
    RewriteCond %{HTTP_HOST} ^localhost$ [NC]
    RewriteRule ^(.*)$ /test/www/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
</IfModule>

非常感谢贾斯汀!

1 个答案:

答案 0 :(得分:1)

在做你想做的事情时你必须避免无限循环。

将此代码放入htaccess

RewriteEngine on

RewriteCond %{THE_REQUEST} \ /www/?(.*)\ HTTP/ [NC]
RewriteRule . /%1 [R=301,L]

RewriteRule ^(.*)$ /www/$1 [L]

编辑:考虑您的更新,这是新代码

RewriteEngine on

# Redirect test.com/test (and everything into test folder) to test.com root
RewriteCond %{HTTP_HOST} ^test.com$ [NC]
RewriteCond %{THE_REQUEST} \ /test/? [NC]
RewriteRule . / [R=301,L]

# Forward (internally rewrite) test.com/one/example/page to test.com/test/www/one/example/page
RewriteCond %{HTTP_HOST} ^test.com$ [NC]
RewriteRule ^(.*)$ /test/www/$1 [L]