2016-01-19 62 views
0

我们有一个网站,其中内容由CMS生成。问题在于人们在没有http://的情况下向其网站添加链接,因此所有链接都以错误的方式生成。htaccess根据网址中的字符串重定向到域

为如:http://www.example.com/ec/shefaliaxena/eventupdate/www.shefalisaxena.com

我想要做的是最后一个斜线后得到的数据,并检查它是否是使用正则表达式有效的域,如果它是有效的域,然后将它重定向到该域或其他什么都不做。

我能够使用正则表达式([^/]+$)在最后一个斜杠后提取数据,但想知道如何实现此重定向。

我可以很容易地做到这一点与编码,但我想从.htaccess文件本身,以便它不会增加服务器的负担。

+0

你试过这个明显吗? 'RewriteRule([^ /] +)$ http:// $ 1/[L,NC,R = 301]' –

+0

感谢您的评论,我确实尝试过,但此规则重定向了所有请求,我只想仅重定向这些请求在最后一个斜杠之后,如果有一个有效的域。如果它不是一个有效的域名,那么它应该简单地前进,不应该做任何事情。 – Raees

+1

您需要确定使用哪些类型的域以便为其创建良好的表达式。也就是说,你如何在浏览器中输出网站的URL?你总是可以做某种检查来查看'http://'是否存在,如果不存在,在显示页面上的URL之前添加它。这样做可能是最好的,因为你根本不需要重定向。 –

回答

0

您可能会遇到的一个问题是,有效的文件名通常看起来很像有效的域名,所以您需要确保在尝试之前看起来像域名的东西不是有效的文件转发URL:

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule /(([A-Za-z0-9-]+\.)+[A-Za-z]{2,6})$ http://$1/ [L,NC,R=301] 

如果您正在生成的数据从用户输入的网址,我肯定会看看添加的协议了,而不是做这种方式。

+0

感谢凯文真的帮助和排序我的问题。荣誉给你。 – Raees