2015-08-13 73 views
0

我有写一些正则表达式去我的htaccess文件中的问题。htaccess转发到子文件夹但隐藏子文件夹名称

基本上,我的网站已经建立,这样的index.php和所有其他网站文件不在根(的public_html)目录中,而是在http://fitnessquiz.co.uk/fitnessquiz.co.uk/

起初我想在我的public_html文件夹中的以下内容:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^fitnessquiz.co.uk$ [NC,OR] 
RewriteCond %{HTTP_HOST} ^www.fitnessquiz.co.uk$ 
RewriteCond %{REQUEST_URI} !fitnessquiz.co.uk/ 
RewriteRule (.*) /fitnessquiz.co.uk/$1 [L] 

它正确导航到我的主页,并正确显示网址,但当我点击任何链接时,我得到一个“没有输入文件指定”的消息。于是我试着用替换:

RewriteCond %{REQUEST_URI} !^/fitnessquiz.co.uk/ 

重写规则^(。*)$ /fitnessquiz.co.uk/$1 [L,R = 301]

此后该网站的作品,但每个URL看起来像这样的:

http://fitnessquiz.co.uk/fitnessquiz.co.uk/someotherfolder/etc.php

我试着在这里的其他地方列出的各种htaccess的正则表达式的解决方案,但似乎没有工作,我怎么达到这两个东西,即重定向到/fitnessquiz.co.uk每一个url,但隐藏重复的网址名称/文件夹。我在共享服务器上,所以没有权限直接更改任何服务器/ Apache设置。

+0

查看此SO [post](http://stackoverflow.com/questions/1304492/htaccess-redirect-without-changing-address-bar) – gwillie

回答

1

根据this answer通过核爆在previous post你可以尝试:

RewriteCond %{THE_REQUEST} ^GET\ /fitnessquiz.co.uk/ 
RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$ 
RewriteRule ^fitnessquiz.co.uk/(.*) /$1 [L,R=301] 

RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$ 
RewriteRule !^fitnessquiz.co.uk/ fitnessquiz.co.uk%{REQUEST_URI} [L] 

这一套规则为我工作在一个非常类似的情况。我采用了同样的治疗方法,(重新调整文件夹后重新打开文件,在重新编写文件后隐藏)但是我从来没有单独获得过订单。因此,我一直看到该页面也没有发现错误。以下是我试图解释的行动,为我自己的学习,也希望其他人。

RewriteCond %{THE_REQUEST} ^GET\ /fitnessquiz.co.uk/ 

问这个问题,THE_REQUEST包含你需要隐藏的子文件夹吗?

RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$ 

检查请求是否用于正确的主机。

RewriteRule ^fitnessquiz.co.uk/(.*) /$1 [L,R=301] 

将网址重写为没有子文件夹的URL,并在重定向的浏览器中调用新链接。备注:

  • L:最后一步。停止处理其他规则
  • R = 301:重写后,将浏览器重定向到新的URL。

当页面被重定向时,它没有子文件夹,所以第一个RewriteRule被跳过。然后

RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$ 

检查是否调用正确的主机。然后

RewriteRule !^fitnessquiz.co.uk/ fitnessquiz.co.uk%{REQUEST_URI} [L] 

重写还没有使用正确的子文件夹,而不会重定向页面的子文件夹的URL,而在浏览器隐藏实际的子文件夹。再次注意:

  • L:最后一步。停止处理其他规则