Htaccess转发到子文件夹,但隐藏子文件夹名称


htaccess forward to subfolder but hide subfolder name

我有一个问题,写一些正则表达式去我的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]

正确导航到我的主页并正确显示url,但当我点击任何链接时,我得到一个"没有输入文件指定"的消息。然后我试着用:

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

rewriterrule ^(.*)$/fitnessquiz.co。英国/1美元[L R = 301]

之后的网站工作,但每个url看起来像这样:

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

我尝试了各种htaccess正则表达式解决方案在这里列出的其他地方,但似乎没有工作,我如何完成这两件事,即重定向到/fitnessquiz.co。英国为每个url,但隐藏重复的url名称/文件夹。我在共享服务器上,所以没有权限直接更改任何server/apache设置。

根据nuked在上一篇文章中的回答,你可以试试:

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重写为不包含子文件夹的URL,并在重定向浏览器中调用新链接。注意:

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

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

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

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

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

将没有子文件夹的url重写为使用正确的子文件夹而不重定向页面,同时对浏览器隐藏实际的子文件夹。再次注意:

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