愚蠢的mod_rewrite问题

时间:2015-06-20 12:48:04

标签: .htaccess 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 个答案:

答案 0 :(得分:0)

如果没有涉及查询字符串,可以使用RedirectMatch(不确定为什么忽略那部分网址,或者我错了)。

无论如何,用mod_rewrite试试这个:

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

这假设存在RewriteEngine On指令,并且没有其他mod_rewrite规则可以混合(如果存在,请考虑使用L标志或重新排列规则)。

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

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

答案 1 :(得分: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. 如果请求的网址不是文件
  3. 如果请求的网址不是目录
  4. 然后,它被重定向到idea.php
  5. 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. 稍微清理它以避免永久链接出现问题。
    4. 然后我们查询数据库以查看是否有任何文章与$ _SERVER ['REQUEST_URI']相匹配。

      这不是我所描述的问题的具体解决方案,但它可以很好地处理几乎每个使用PHP的案例,好像它没有找到你可以很容易地重定向到PHP,甚至你可以使用LIKE查询,并显示类似的结果......

      希望它有所帮助! 克里斯;