22

所以,我有这个问题:

  1. 基地网站位于http://example.com/
  2. 第二个网站位于http://example.com/web2/
  3. 人们向第二个网站提出各种请求, 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>

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

4

2 回答 2

6

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

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

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

于 2013-09-14T16:39:17.700 回答
5

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.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]
于 2013-09-14T16:35:19.163 回答