没有http | https的外部链接失败

时间:2013-10-04 15:37:07

标签: php regex .htaccess mod-rewrite seo

我根本不擅长正则表达式。

我使用的RewriteRule是:

 RewriteRule ^([a-zA-Z0-9_-]+)$ /kurum.php?sef=$1 [QSA]

哪个转换

http://fxrehber.com/kurum.php?sef=gcm-forexhttp://fxrehber.com/gcm-forex

我的php文件将URL处理为:

<a href="http://<?php echo $demoUrl ?>" target="_blank">Open Demo Account</a>

如果我的php文件中没有包含“http://”,则链接会转到

http://fxrehber.com/www.example.com

所以我将数据库中的URL保存为:www.example.com

但是现在我需要使用带https的URL,我需要从php文件中删除“http://”,我可以将数据库中的URL保存为www.example.com和{{3 }}

这样做的方法是什么?用一些正则表达式更改我的RewriteRule或修改我的php文件?

2 个答案:

答案 0 :(得分:2)

好的,我非常关注正则表达式和RewriteRule,所以在解释我的问题时我明白它可以通过检查URL中是否包含http / https来解决:

if (0 !== stripos($demoUrl, 'http://') && 0 !== stripos($demoUrl, 'https://')) 
{ $demoUrl = 'http://' . $demoUrl; }

现在我可以在数据库中保存所有3种类型的URL(以www,http和https开头),而不需要修改旧的URL。 但我仍然想知道是否有一种方法可以通过重写来使用没有http / https的链接。 (正如我之前所说,当我点击我网站上的链接“www.example.com”时,它会尝试访问www.mysite.com/www.example.com)

答案 1 :(得分:0)

rewrite规则中的正则表达式用于启用干净的URL。该机制将整个URI传递给kurum.php - 通过$_GET['sef'],其中内容routing应该发生。

如果匹配的文件/目录与请求URI匹配,则以下规则将禁用 rewrite

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-zA-Z0-9_-]+)$ /kurum.php?sef=$1 [QSA]