.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/pg1
和 http://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,然后把这段代码放到你.htaccess
的DOCUMENT_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 的<head>
标记下方添加此代码:<base href="/" />
以上是关于.htaccess RewriteRule 到路径而不更改 URL的主要内容,如果未能解决你的问题,请参考以下文章
htaccess Apache RewriteRule .asp 到 .php