我在写一些正则表达式进入我的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设置。
答案 0 :(得分: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重写为没有子文件夹的URL,并在重定向的浏览器中调用新链接。注意:
当页面被重定向时,它没有子文件夹,因此跳过了第一个RewriteRule。然后
RewriteCond %{HTTP_HOST} ^(www\.)?fitnessquiz.co.uk$
检查是否正在呼叫正确的主机。然后
RewriteRule !^fitnessquiz.co.uk/ fitnessquiz.co.uk%{REQUEST_URI} [L]
重写没有子文件夹的url以使用正确的子文件夹而不重定向页面,同时从浏览器中隐藏实际的子文件夹。再说一遍: