如何显示使用mod_rewrite搜索引擎友好的网址吗?(How can I display SEO

2019-07-20 17:15发布

我不是在心脏一个PHP开发人员,我被要求在现有的PHP的网站进行一些搜索引擎优化。

我注意到的第一件事是丑陋的网址,所以我想这些改写的东西更丰富。 这里是所有可能的模式:

/index.php?m=ModuleType&categoryID=id
/index.php?m=ModuleType&categoryID=id&productID=id
/index.php?page=PageType
/index.php?page=PageType&detail=yes

所以基本上我想要做的就是将这些成类似:

/ModuleType/Category
/ModuleType/Category/ProductName
/Page
/Page

我没有使用mod_rewrite的任何建议或之前的例子将是巨大的!

谢谢。

Answer 1:

mod_rewrite的宁可被用来做相反的事情:改写的请求/ModuleType/Category/ProductName内部到/index.php?m=ModuleType&categoryID=id&productID=id 。 在文档中使用新的URL是应用程序的工作。


编辑下面是一个函数可能看起来怎么样,将您的参数的URL到新的一个例子:

function url($url, $rules) {
    $url = parse_url($url);
    parse_str($url['query'], $url['query']);
    $argNames = array_keys($url['query']);
    foreach ($rules as $rule) {
        if ($rule[0] == $url['path'] && array_keys($rule[1]) == $argNames) {
            $newUrl = $rule[2];
            foreach ($rule[1] as $name => $pattern) {
                if (!preg_match('/'.addcslashes($pattern, '/').'/', $url['query'][$name], $match)) {
                    continue 2;
                }
                $newUrl = str_replace('<'.$name.'>', $match[0], $newUrl);
            }
            return $newUrl;
        }
    }
    return $url;
}

$rules = array(
    array(
        '/index.php',
        array('m'=>'.*', 'categoryID'=>'.*', 'productID'=>'.*'),
        '/<m>/<categoryID>/<productID>'
    )
);
echo '<a href="' . url('/index.php?m=ModuleType&categoryID=categoryID&productID=productID', $rules) . '">/ModuleType/Category/ProductName</a>';


Answer 2:

我不以任何方式一个mod_rewrite的专家,但是这是我如何放在一起的.htaccess的图像弗莱尔网站的例子:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/(.*)\.png$ imageFlair.php?mode=$1&userid=$2 [L]
RewriteRule ^(.*)\.png$ imageFlair.php?userid=$1 [L]
</IfModule>

这基本上映射:

MODE / USERID.png? - > imageFlair.php模式=模式&的userid = USERID

USERID.png - > imageFlair.php用户id = USERID

您应该能够是去适应你的需求,但你可能有几个问题:

  1. 如果你想使用你的网址“名称”,而不是ID,您就需要改变PHP接受的名字。
  2. 你可能有/页和/ ModuleType冲突的一个问题,如果你想也包括与页的​​详细参数,除非你可以把一个正则表达式,可以决定哪个是哪个。

去你想要的URL列表上,这应该工作,虽然我不会要求它做到这一点的最佳或唯一办法:-)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)$ index.php?m=$1&categoryID=$2&productID=$3 [L]
RewriteRule ^(.*)/(.*)$ index.php?m=$1&categoryID=$2 [L]
RewriteRule ^(.*)$ index.php?Page=$1 [L]
</IfModule>

至于建议,您可能需要更换。*用[^ /] +,但我不得不与非匹配的问题时,我这样做,并没有时间来解决,所以因人而异:-)



Answer 3:

这不是从您的帖子相当清楚的变量。 但是,假设ModuleTypeid (x2)和Page都是变量,然后用反向引用下面的规则应该一中工作.htaccess文件。

RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)$ /index.php?m=$1&categoryID=$2 [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ /index.php?m=$1&categoryID=$2&productID=$3 [L]
RewriteRule ^([^/]+)$ /index.php?page=PageType [L]
RewriteRule ^([^/]+)/detail$ /index.php?page=PageType&detail=yes [L]

最后一个没有真正意义是你写的吧。 因此,你可以添加/detail上结束。

这些应该滑直在现有应用程序的顶部没有任何修改的应用程序。 因为它们不与重定向[R]这将是透明的用户。



文章来源: How can I display SEO friendly URLs using mod_rewrite?