.htaccess RewriteRule 到路径而不更改 URL

Posted

技术标签:

【中文标题】.htaccess RewriteRule 到路径而不更改 URL【英文标题】:.htaccess RewriteRule to path without changing URL 【发布时间】:2013-09-19 03:54:04 【问题描述】:

所以,我有这个问题:

    基地网站位于http://example.com/ 第二个网站位于http://example.com/web2/ 人们向第二个网站提出各种请求,例如 http://example.com/myWeb/pg1http://example.com/web2/pg2

最近,由于一些其他问题,我需要为第二个网站自定义新路径,但还要保持第一个网站正常工作。

想法是允许用户通过以下两个地址访问第二个网站:

http://example.com/web2/ http://example.com/alternative-url-web2/

文件夹/web2/实际上存在于服务器上,但是我如何模拟文件夹/alternative-url-web2/并将请求“重定向”到/web2/

请注意,我不希望浏览器上的 URL 发生变化,这必须是“静默重定向”。而且我还确保所有其他请求(如 http://example.com/other)不会被第二个网站重定向。

谢谢。


更新

根据@anubhava,我可以通过添加我的.htaccess 来解决这个问题:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^alternative-url-web2(/.*|)$ /web2$1 [L,NC]

这可能工作正常,但我注意到以下内容:

http://ex.com/alternative-url-web2 被重定向到 http://ex.com/web2/(更改浏览器 URL); http://ex.com/alternative-url-web2/ 被重定向到 http://ex.com/(更改浏览器 URL); http://ex.com/alternative-url-web2/someRequest 工作正常,不会更改浏览器 URL; http://ex.com/alternative-url-web2/index.php 工作正常,不会更改浏览器 URL;

网站说明:

/web2/ 有一个.htaccess可能会导致上述有线重定向行为...所以这里是文件内容:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %REQUEST_FILENAME -f [OR]
    RewriteCond %REQUEST_FILENAME -l [OR]
    RewriteCond %REQUEST_FILENAME -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
</IfModule>

index.php 的内部 RewriteRule 会导致这一切吗?如果是,我该如何解决?

【问题讨论】:

【参考方案1】:

这是一个非常简单的重写。在文档根目录的 htaccess 文件中,只需添加以下内容:

RewriteEngine On
RewriteRule ^alternative-url-web2/?(.*)$ /web2/$1 [L]

与重定向不同,它使浏览器/客户端发送一个新 URL 的新请求(从而改变浏览器地址栏中的内容),重写完全发生在服务器端。

【讨论】:

与@anubhava 答案相同的问题。在问这个问题之前,我过去已经尝试过类似的东西,也显示了同样的问题。 不会错误地将http://ex.com/alternative-url-web222 转发到http://ex.com/web2/22 吗? @TCB13 您的 htaccess 文件中还有其他规则吗? 您可能是对的,问题似乎是web2 目录中的另一个 .htaccess 文件。 (请检查原始问题)。 @TCB13 也没有重定向【参考方案2】:

通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^alternative-url-web2(/.*|)$ /web2$1 [L,NC]

备用代码:

RewriteRule ^alternative-url-web2/?$ /web2/ [L,NC]
RewriteRule ^alternative-url-web2/(.+)$ /web2/$1 [L,NC]

【讨论】:

替代代码部分适用于我...只是 html 加载正确。缺少 CSS 和 JS……有什么想法吗? 您可以在页面 HTML 的 &lt;head&gt; 标记下方添加此代码:&lt;base href="/" /&gt;

以上是关于.htaccess RewriteRule 到路径而不更改 URL的主要内容,如果未能解决你的问题,请参考以下文章

检测嵌套路径并使用RewriteRule重定向到home

转载 .htaccess文件RewriteRule语法规则

htaccess Apache RewriteRule .asp 到 .php

我的 .htaccess 中的 RewriteRule 命令不起作用

Htaccess将特定网址重定向到另一个网址的路径

.htaccess - ErrorDocument 与 RewriteRule