所以,我有这个问题:
http://example.com/
http://example.com/web2/
http://example.com/myWeb/pg1
和http://example.com/web2/pg2
最近由于其他一些问题,我需要为第二个网站设置一个自定义的新路径,但也要保留第一个网站。
ideia是允许用户通过以下两个地址访问第二个网站:
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/
(更改浏览器网址); http://ex.com/alternative-url-web2/
被重定向到http://ex.com/
(更改浏览器网址); http://ex.com/alternative-url-web2/someRequest
工作正常,不会更改浏览器网址; http://ex.com/alternative-url-web2/index.php
工作正常,不会更改浏览器网址; 网站注意:
在/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>
内部RewriteRule可以index.php
导致所有这些吗?如果是,我该如何解决?
答案 0 :(得分:5)
通过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]
答案 1 :(得分:2)
这是一个非常简单的重写。在文档根目录中的htaccess文件中,只需添加以下内容:
RewriteEngine On
RewriteRule ^alternative-url-web2/?(.*)$ /web2/$1 [L]
与重定向不同,重定向使浏览器/客户端发送新URL请求(从而改变浏览器位置栏中的内容),重写完全发生在服务器端。