Apache2重写 - 条件

时间:2016-11-03 16:02:52

标签: apache mod-rewrite

我项目的网络根目录中有以下.htaccess文件:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /repos/eamorr.co.uk/react_www/index.html [L,QSA]

以上作品。

当我导航到:

http://localhost/repos/eamorr.co.uk/react_www

我看到了我的主页。

当我导航到:

http://localhost/repos/eamorr.co.uk/react_www/contact-us

我看到"联系我们"我的主页的路线(我的网页是用React写的)。

行。大。

现在,有些用户在Linux上:

当他们签出代码时,他们会看到网站的网址略有不同:

http://localhost/_eamorr/develop/eamorr.co.uk/react_www/

http://localhost/_eamorr/develop/eamorr.co.uk/react_www/contact-us

关于.htaccess文件的这一行:

RewriteRule . /repos/eamorr.co.uk/react_www/index.html [L,QSA]

而不是.是否有一些条件我可以从不同的路径投入服务index.html?

e.g。

RewriteRule {{condition1???}} /repos/eamorr.co.uk/react_www/index.html [L,QSA]

或(不同条件=不同路径):

RewriteRule {{condition1???}} /_eamorr/develop/eamorr.co.uk/react_www/index.html [L,QSA]

我担心我的Apache知识不能快速完成,而且我已经花了好几个小时了!

=================

解决方案:

使用级联htaccess重写规则设置,如下所示:

RewriteEngine On
#RewriteBase /


#Linux localhost:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} ^.*repos/eamorr.co.uk/react_www.*$
RewriteRule ^([^/]+\.?[^/])*$ /repos/eamorr.co.uk/react_www/index.html [L,QSA]


#Mac localhost:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} ^.*_eamorr/eamorr.co.uk/react_www.*$
RewriteRule ^([^/]+\.?[^/])*$ /_eamorr/eamorr.co.uk/react_www/index.html [L,QSA]


#develop .co.uk
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} ^.*gitWebFlow/eamorr.co.uk/develop/react_www.*$
RewriteRule ^([^/]+\.?[^/])*$ /gitWebFlow/eamorr.co.uk/develop/react_www/index.html [L,QSA]


#master .co.uk
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} ^.*gitWebFlow/eamorr.co.uk/master/react_www.*$
RewriteRule ^([^/]+\.?[^/])*$ /gitWebFlow/eamorr.co.uk/master/react_www/index.html [L,QSA]


#default
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.html [L,QSA]

这足以满足我现在的需求。

1 个答案:

答案 0 :(得分:1)

如果react_www是您项目的根目录,并且您没有引用该目录上方的资源(公开,通过网址),那么.htaccess应该是这里的。{1}}。然后就会变成

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . index.html [END]

您不需要RewriteBase,因为您没有进行服务器端外部重定向,只是希望该目录下的虚拟URL都提供相同的文件。