2015-06-20 181 views
-1

我想我从来没有问过这样的问题,我知道我应该阅读手册,所以我做了,但我根本无法做到这一点。愚蠢mod_rewrite问题

我需要重写规则,从这个移动:

https://www.proevisa.com/ar/idea.php?permalink=proevisa/is-it-safe-to-provide-my-personal-and-finance-information-online 

这样:

https://www.proevisa.com/ar/proevisa/is-it-safe-to-provide-my-personal-and-finance-information-online 

我还不知道我是否应该更新网站上的链接,因为它们指向到原来的网址不是漂亮的。

有人可以帮我一点这个吗?

非常感谢, 克里斯

+2

您应该显示当前尝试的代码来解决问题。 – Anonymous

回答

0

如果有不涉及查询字符串,RedirectMatch可以使用(不知道为什么要制作它忽略URL的一部分,也许我错了)。

无论如何,与mod_rewrite的尝试:

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} ^/ar/idea\.php\?permalink=(.*?)$ 
RewriteRule . /ar/%1? [R=301] 

这是假设有一个RewriteEngine On指令存在,并且有可能混在(如果有,请考虑使用L标志或任何其他的mod_rewrite规则重新安排规则)。

%1引用permalink=后的正则表达式“group”的内容。它告诉从结果中省略旧的查询字符串之后的?R=301是永久重定向。

当然,更新网站上的链接,旧的链接从索引和书签中消失后,删除规则,因为它们将变得不相关。

+0

感谢* 1000倍燃气焊接器... htaccess真的不适合我。 –

0

所以我终于来到了更多基于PHP的解决方案,因为我的mod_rewrite技能并不是很好。这是我所做的:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /proevisa/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /proevisa/ar/idea.php?r=$1 
</IfModule> 

是的,它是基于Wordpress的重写结构。它的功能基本如下:

  1. 定义基本路径为Proevisa,它是我的主目录。
  2. 如果请求的URL是不是一个文件
  3. 如果请求的URL不是目录
  4. 然后,它重定向到idea.php

Idea.php执行以下操作:

//recibimos la información del usuario 
$idea->base_dir = "/proevisa/ar"; 
$idea->permalink = addslashes($_SERVER['REQUEST_URI']); 
$idea->permalink = str_replace($idea->base_dir, "", $idea->permalink); 
  1. 再次定义基础目录。
  2. 分析原始请求URI
  3. 清理它有点避免与永久链接有关的问题。

然后我们查询数据库,看看是否有任何文章与$ _SERVER ['REQUEST_URI']匹配。

这不是一个针对我所描述的问题的具体解决方案,但它可以很好地处理几乎每个使用PHP的案例,就好像找不到您可以轻松地重定向到PHP,或者甚至可以使用LIKE在查询中,并显示类似的结果...

希望它可以帮助别人! Chris;