友好的网址使用PHP和htaccess

时间:2014-04-24 10:32:32

标签: php .htaccess url url-rewriting

我已根据我从数据库中获取的值设法更改了网址。 在我的网址中,我需要传递文章ID和文章标题。

$articleId=123;
$articleTitle='First Article';
echo '<a href="'.$articleId.'&'.str_replace(" ","-",$articleTitle).'">Read More</a>';

在我的htaccess文件中

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) display.php?id=$1&$2

然后在Display.php上,我将使用Get方法获取文章ID。 但我的问题是,当我看到它显示这样的网址时。

http://localhost/News/123&First-Article

但我需要像这样显示网址。

http://localhost/News/First-Article

并在Display.php文件中显示文章详细信息。 希望我已经清楚地解释了这个问题。请指教。 在此先感谢。

6 个答案:

答案 0 :(得分:0)

我要说你必须改变这个:

RewriteRule (.*) display.php?id=$1&$2

到那个:

RewriteRule ^(.+)[&](.+)$ display.php?id=$1/$2

答案 1 :(得分:0)

你只需要传递标题

echo '<a href="'.str_replace(" ","-",$articleTitle).'">Read More</a>';

in .htaccess

RewriteRule (.*) display.php?id=$1

因此$_GET['id']会直接获取您的文章标题。

答案 2 :(得分:0)

您可以尝试类似

的内容
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /News/(.*)&(.*)\ HTTP
RewriteRule ^ /News/%2/%3? [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^News/(.*)/(.*)$ /News/$1&$2 [L]

http://localhost/News/123&First-Article显示为http://localhost/News/123/First-Article

编辑:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST)\ /(.*)&(.*)\ HTTP
RewriteRule ^ /%2/%3? [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*)$ /News/$1&$2 [L]

答案 3 :(得分:0)

根据我提出的问题,最合适的答案是维护一篇独特的文章名称。

$articleTitle='First Article';
echo '<a href='.str_replace(" ","-",$articleTitle).'">Read More</a>';

在您的Htaccess文件

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) display.php?id=$1

那么网址就像我想要的那样。

答案 4 :(得分:0)

在数据库表“article_url_name”中创建一个列,并使用此函数创建文章URL名称并存储在数据库中。

function make_url_name($title){
    $result =   "";

    $str    =   strtolower(stripslashes($str));
    $str    =   preg_replace("/ /i", "-", $str);

    for($n = 0; $n < strlen($str); $n++){
        if(preg_match("#^[a-z0-9-]+$#", $str[$n]))
            $result .=  $str[$n];
    }

    // Removing multiple ----
    $result =   preg_replace("/-----/i", "-", $result);
    $result =   preg_replace("/----/i", "-", $result);
    $result =   preg_replace("/---/i", "-", $result);
    $result =   preg_replace("/--/i", "-", $result);
    return $result;
}

把它放在你的htaccess文件中

RewriteRule ^news/([a-zA-Z0-9-]+)$ articles.php?url_name=$1 [NC,L]

在“articles.php”文件中获取这样的url名称$ _GET ['url_name'];

将此url_name与数据库表中的“article_url_name”列匹配,并显示文章内容。

答案 5 :(得分:0)

如果传入 URI

/News/First-Article

您希望自己的网站看到

/display.php?id=First-Article

你的.htaccess将是

RewriteEngine On
RewriteCond  %{REQUEST_FILENAME}  !-f
RewriteCond  %{REQUEST_FILENAME}  !-d
RewriteRule  ^News/([^/]+)/?  /display.php?id=$1  [L]

如果&#34; First-Article&#34;不够独特,您需要在URI中携带唯一标识符:

/News/123/First-Article

您希望自己的网站看到

/display.php?id=123&title=First-Article

你的.htaccess将是

RewriteEngine On
RewriteCond  %{REQUEST_FILENAME}  !-f
RewriteCond  %{REQUEST_FILENAME}  !-d
RewriteRule  ^News/([^/]+)/([^/]+)/?$  /display.php?id=$1&title=$2  [QSA,L]

如果标题无法用于查找文章,则可以省略标题。 QSA标志用于保留任何现有的传入Query String变量(并且只添加id和title)。