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

时间:2015-08-13 22:46:29

标签: php regex .htaccess laravel

我在写一些正则表达式进入我的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/

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

之后网站可以运行,但每个网址都是这样的:

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

我已尝试过在此处其他地方列出的各种htaccess正则表达式解决方案但似乎没有工作,我如何完成这两项工作,即为每个网址重定向到/fitnessquiz.co.uk但隐藏重复的网址名称/夹。我在共享服务器上,因此无权直接更改任何服务器/ apache设置。

1 个答案:

答案 0 :(得分:1)

根据this answerprevious 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重写为没有子文件夹的URL,并在重定向的浏览器中调用新链接。注意:

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

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

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

检查是否正在呼叫正确的主机。然后

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

重写没有子文件夹的url以使用正确的子文件夹而不重定向页面,同时从浏览器中隐藏实际的子文件夹。再说一遍:

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