.htaccess-更改网址-RewriteRule不起作用

时间:2018-09-04 14:52:30

标签: .htaccess url mod-rewrite permalinks

我对此很陌生,希望您能帮助我解决此问题。

我有一个URL结构,该结构从数据库获取ID并显示如下网址:

www.website.com/post.php?P=18

我想将网址显示为:

www.website.com/post/18

在我的.htaccess文件中,我将其更改为:

RewriteEngine on
RewriteRule ^post/(\w+)$ post.php?P=$1

在SO上,我已经阅读了有关此内容的几篇文章,但似乎无法弄清楚。

我遵循了这一点:

The Rule:
RewriteRule ^user/(\w+)/?$ user.php?id=$1

Pattern to Match:
^              Beginning of Input
user/          The REQUEST_URI starts with the literal string "user/"
(\w+)          Capture any word characters, put in $1
/?             Optional trailing slash "/"
$              End of Input

Substitute with:
user.php?id=   Literal string to use.
$1             The first (capture) noted above.

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试以下,

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^post/(\w+)$ post.php?P=$1 [L]

答案 1 :(得分:0)

我认为与其他可能遇到相同问题的其他人共享这种信息很重要,所以去吧。

问题:

[1]看起来像这样的链接:www.example.com/news.php?P=1

链接应类似于www.example.com/news/1

然后,该链接将不得不最后显示文本而不是ID。 www.example.com/news/news-name

解决方案

首先,我有一个看起来像这样的锚标记

<a href="news.php?P='.$row['post_id'].'" class="btn btn-link"></a>

它在URL [1]中给出了第一个结果。要对其进行更改以使其显示为www.example.com/news/1,我必须执行以下操作:

创建一个htaccess文件并按以下方式填充它:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC]
### THIS IS AN EXAMPLE FOR MULTIPLE EXPRESSIONS ###
#RewriteRule ^news/([0-9]+)/([0-9a-zA-Z_-]+) news.php?P=$1&name=$2 [NC,L]

RewriteRule ^news/([0-9]+) news.php?P=$1 [NC,L]

然后,将锚标记更改为:<a href="news/'.$row['post_id'].'" class="btn btn-link"></a>

[1]现在将完成。

现在的挑战是使用子弹代替ID。在创建帖子的页面上,我添加了以下PHP:

<?php
setlocale(LC_ALL, 'en_US.UTF8');
function slugit($str, $replace=array(), $delimiter='-') {
    if ( !empty($replace) ) {
        $str = str_replace((array)$replace, ' ', $str);
    }
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
    $clean = strtolower(trim($clean, '-'));
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
    return $clean;
}
?>

然后,在新闻插入页面上,我添加了:$slug = slugit("$entry1");,它将通过$entry1 = $_POST['title'];作为页面标题,但出现了错误。在新闻数据库中,我创建了一个列来容纳$slug作为永久链接名称。

现在要显示带有该条的URL,我必须将锚标记更改为:

<a href="news/'.$row['permalink'].'" class="btn btn-link"></a>

然后在htaccess上,将RewriteRule ^news/([0-9]+) news.php?P=$1 [NC,L]更改为RewriteRule ^news/([0-9a-zA-Z_-]+) news.php?P=$1 [NC,L]

这就是我使它工作的方式。我希望这将帮助有类似问题的人解决他们的问题。