如何创建seo友好的url与php和htaccess


How to create seo friendly urls with php and htaccess?

我正在尝试使用htaccess文件和PHP生成seo友好的url。但是它不工作。

我在本地主机上尝试了下面的代码(运行XAMPP)

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

实现相同的结果有不同的方法,但这将给您一个指导。

首先激活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;
    }
    ?>

[NC, L]

您需要删除RewriteRule标志之间的空格。这将导致500 Internal Server错误-在这种情况下,您应该检查错误日志以查找更有意义的错误。它应该写成:

[NC,L]

没有空格。


更新:对于mod_rewrite工作在每个目录。htaccess文件,FollowSymLinks也必须启用(如果它还没有)。在.htaccess文件的最上面,包括:

Options +FollowSymLinks