如何使用php和htaccess创建seo友好的URL?

时间:2015-08-11 11:46:28

标签: php .htaccess seo friendly-url

我尝试使用htaccess文件和PHP生成seo友好的URL。但它没有用。

我在localhost(运行XAMPP)中尝试了以下代码

RewriteEngine On
RewriteBase /real/

RewriteRule ^property-details/([0-9a-zA-Z]+) property-details.php?pid=$1 [NC, L]

2 个答案:

答案 0 :(得分:1)

有不同的方法可以获得相同的结果,但这将为您提供指导。

首先激活mod_rewrite取消注释httpd.conf或apache2.conf文件中的这一行:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

将AllowOverride从none更改为All到您的www目录

    <Directory />
        AllowOverride All 
        Require all denied
    </Directory>

重启apache:

sudo apachectl restart

    sudo service apache2 restart

在您的www文件夹中,创建一个.htaccess文件并添加:

    # | SEO URL                                                                                
    Options +FollowSymLinks  
    RewriteEngine On  
    RewriteCond %{SCRIPT_FILENAME} !-d  
    RewriteCond %{SCRIPT_FILENAME} !-f  
    RewriteRule ^.*$ ./index.php

然后在index.php文件中:

<?php
    $url_params=get_url_params();

    // then access your url_params
    if (isset($url_params[1]))
    {
        switch ($url_params[1]) 
        {
            case 'login':
                    echo "<h1>Login</h2>";
                break;

            case 'contact':
                    echo "<h1>Cantact</h2>";
                break;

            default:
                echo "<h1>Home</h2>";
                break;
        }

    }

    function get_url_params($site_url='')
    {
        $base_url=explode("/", $site_url);
        $request  = $_SERVER['REQUEST_URI'];
        $url_params = explode("/", $request);
        $delete_extensions=array('.html','.htm');
        $data[]=array();
        foreach ($base_url as $b)
        {
            unset( $url_params[array_search( "$b", $url_params )] );
        }
        foreach ($url_params as $u)
        {
            foreach ($delete_extensions as $e){
                $u=str_replace($e, "", $u);
            }
            $data[]=$u;
        }
        return $data;
    }
    ?>

答案 1 :(得分:0)

  

[NC, L]

您需要删除RewriteRule标记之间的空格。这将导致500内部服务器错误 - 在这种情况下,您应检查错误日志以获得更有意义的错误。它应该写成:

[NC,L]

没有空格。

<强>更新 要使mod_rewrite在每个目录.htaccess文件中工作,还必须启用FollowSymLinks(如果尚未启用)。在.htaccess文件的最顶部,包括:

Options +FollowSymLinks