【问题标题】:Redirect url to another将网址重定向到另一个
【发布时间】:2016-03-31 20:43:16
【问题描述】:

我正在使用 AWS EC2 实例来托管网站。我在 /var/www/html/xyz/ 目录下进行了安装,因此如果我必须访问网站主页,我必须将链接指定为 www.example.come/xyz。我希望 www.example.com 应该被重定向到 www.example.com/xyz

知道如何自动将 www.example.com 重定向到 www.example.com/xyz(httpd 配置或类似的东西)?

我在网上查过,但大多数帖子都与子域重定向有关,例如将 admin.example.com 重定向到 www.example.com,这不是我的问题。

谢谢!

我的 .htaccess 文件是:

<IfModule mod_rewrite.c>
RewriteEngine on
# Some hostings require RewriteBase to be uncommented
# Example:
# Your url is http://www.yourcompany.com/xyz
# So "RewriteBase" should be:
# RewriteBase /xyz

Options -MultiViews
RewriteBase /xyz

RewriteCond %{REQUEST_URI} ^api/(.*)$ [or]
RewriteCond %{REQUEST_URI} .*/api/(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .*api/(.*)$ api.php?_d=$1 [L,QSA]

RewriteCond %{REQUEST_URI} \.(png|gif|ico|swf|jpe?g|js|css|ttf|svg|eot|woff|yml|xml)$ [or]
RewriteCond %{REQUEST_URI} store_closed.html$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)\/(.*)$ $2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L,QSA]

</IfModule>

【问题讨论】:

    标签: php apache .htaccess redirect amazon-ec2


    【解决方案1】:

    在您的 htaccess 文件中使用此代码,这会将用户重定向到子文件夹而不更改 URL www.domain.com

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www\.)?domain2\.com$ [NC]
    RewriteRule !^subdir/ /subdir%{REQUEST_URI} [L,NC]
    

    URL www.domain.com/subdir 的另一种方法

    RewriteEngine On
    RewriteRule ^$ /subdir[L]
    

    【讨论】:

    • 我尝试了上述两个选项并重新启动了 httpd,但它们不起作用。 RewriteCond %{HTTP_HOST} ^(www\.)?domain2\.com$ [NC] RewriteRule !^subdir/ /subdir%{REQUEST_URI} [L,NC] RewriteCond %{REQUEST_URI} ^/$ RewriteRule (.*) / subdir/ [R=301] 重写规则 ^$ /subdir[L]
    • Redirect 301 /path/to-old-url http://www.cyourdomain.com/path/to-Try this new-url
    • 我给了 Redirect 301 example.com example.com/xyz 但是当我输入 example.com 时,它仍然没有被重定向。是否有另一种方法来验证我对 .htaccess 的任何更改是否得到反映
    • RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*?)\/(.*)$ $2 [L]已经指定了两次了,不用再写了
    【解决方案2】:

    使用以下代码创建新的 .htaccess 文件

    RewriteEngine on RewriteCond %{REQUEST_URI} ^/$ RewriteRule (.*) /xyz/ [R=301]

    您应该启用 mod_rewrite。

    【讨论】:

    • 在他的 .htaccess 文件中,他使用的是RewriteBase /xyz,所以这不起作用。您可能想告诉他他应该在 webroot 目录中创建一个新的 .htaccess 文件,其中包含您的内容:)
    • @hakre .htaccess 文件已添加后回答。还是谢谢你:)
    • 你的意思是如果我从文件中删除 RewriteBase 并使用 niteshd22@ 更改它会起作用吗?如果我创建一个新的 .htaccess 文件,那么 .htaccess 文件包含的其他内容呢?
    【解决方案3】:

    您可以在 Root/.htaccess 中使用以下代码:

    RedirectMatch ^/$ /xyz
    

    这将重定向

    http://example.com
    

    http://example.com/xyz
    

    而你想重写 http://example.com/foohttp://example.com/xyz/foo ,你可以使用 mod_rewrite :

    RewriteEngine on
    
    
    RewriteRule ^/?((?!xyz).*)$ /xyz/$1 [L]
    

    【讨论】:

    • 我添加了 RedirectMatch 规则但不起作用。更改规则后,我再次重新启动了 httpd 守护程序,但仍然没有被重定向。我正在根据以下内容进行更改: RewriteEngine on ...
    • @AFH 你能发布你当前的 htaccess 文件吗?
    • 我已将文件内容添加到问题描述中
    【解决方案4】:

    希望这会有所帮助!

    RewriteEngine on
    RewriteCond %{HTTP_HOST} domain\.com [NC]
    RewriteCond %{REQUEST_URI} ^/$
    RewriteRule ^(.*)$ /subfolder/$1 [L]
    

    或者这个

    Redirect 301 /path/to-old-url http://www.cyourdomain.com/path/to-Try this new-url 
    

    【讨论】:

      【解决方案5】:

      另一个选项是更改站点的文档根目录。如果你运行的是 Ubuntu,你应该在/etc/apache2/sites-available/YOUR_SITE.conf(可能是default.conf)中有一个文件。只需编辑它并将DocumentRoot 更改为指向您的子文件夹。

      【讨论】:

        猜你喜欢
        • 2020-09-29
        • 2016-11-05
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多