.htaccess - 更改网址 - RewriteRule 不工作
.htaccess - changing urls - RewriteRule not working
我对此很陌生,希望你能帮我解决这个问题。
我有一个 URL 结构,它从数据库中获取一个 id 并像这样显示 url:
www.website.com/post.php?P=18
我想将 URL 表示为:
www.website.com/post/18
在我的 .htaccess 文件中,我将其更改为:
RewriteEngine on
RewriteRule ^post/(\w+)$ post.php?P=
我已经在 SO 上阅读了一些关于此的帖子,但我似乎无法理解。
我关注了这个:
The Rule:
RewriteRule ^user/(\w+)/?$ user.php?id=
Pattern to Match:
^ Beginning of Input
user/ The REQUEST_URI starts with the literal string "user/"
(\w+) Capture any word characters, put in
/? Optional trailing slash "/"
$ End of Input
Substitute with:
user.php?id= Literal string to use.
The first (capture) noted above.
谢谢!
试试下面的方法,
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^post/(\w+)$ post.php?P= [L]
我认为将此类信息分享给可能遇到相同问题的其他人很重要,所以这里是。
问题:
[1] 一个 link 看起来像:www.example.com/news.php?P=1
link 应该看起来像 www.example.com/news/1
然后,link 将不得不最终显示文本而不是 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 ^(.*)$ .php [NC]
### THIS IS AN EXAMPLE FOR MULTIPLE EXPRESSIONS ###
#RewriteRule ^news/([0-9]+)/([0-9a-zA-Z_-]+) news.php?P=&name= [NC,L]
RewriteRule ^news/([0-9]+) news.php?P= [NC,L]
然后,将锚标签更改为:<a href="news/'.$row['post_id'].'" class="btn btn-link"></a>
[1] 现在就可以完成。
现在的挑战是使用 slug 而不是 ID。在 post 创建页面上,我添加了以下 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
作为永久 link 名称。
现在要显示带有 slug 的 URL,我必须将锚标记更改为:
<a href="news/'.$row['permalink'].'" class="btn btn-link"></a>
然后在 htaccess 上,将 RewriteRule ^news/([0-9]+) news.php?P= [NC,L]
更改为 RewriteRule ^news/([0-9a-zA-Z_-]+) news.php?P= [NC,L]
这就是我让它工作的方式。我希望这能帮助有类似问题的人解决他们的问题。
我对此很陌生,希望你能帮我解决这个问题。
我有一个 URL 结构,它从数据库中获取一个 id 并像这样显示 url:
www.website.com/post.php?P=18
我想将 URL 表示为:
www.website.com/post/18
在我的 .htaccess 文件中,我将其更改为:
RewriteEngine on
RewriteRule ^post/(\w+)$ post.php?P=
我已经在 SO 上阅读了一些关于此的帖子,但我似乎无法理解。
我关注了这个:
The Rule:
RewriteRule ^user/(\w+)/?$ user.php?id=
Pattern to Match:
^ Beginning of Input
user/ The REQUEST_URI starts with the literal string "user/"
(\w+) Capture any word characters, put in
/? Optional trailing slash "/"
$ End of Input
Substitute with:
user.php?id= Literal string to use.
The first (capture) noted above.
谢谢!
试试下面的方法,
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^post/(\w+)$ post.php?P= [L]
我认为将此类信息分享给可能遇到相同问题的其他人很重要,所以这里是。
问题:
[1] 一个 link 看起来像:www.example.com/news.php?P=1
link 应该看起来像 www.example.com/news/1
然后,link 将不得不最终显示文本而不是 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 ^(.*)$ .php [NC]
### THIS IS AN EXAMPLE FOR MULTIPLE EXPRESSIONS ###
#RewriteRule ^news/([0-9]+)/([0-9a-zA-Z_-]+) news.php?P=&name= [NC,L]
RewriteRule ^news/([0-9]+) news.php?P= [NC,L]
然后,将锚标签更改为:<a href="news/'.$row['post_id'].'" class="btn btn-link"></a>
[1] 现在就可以完成。
现在的挑战是使用 slug 而不是 ID。在 post 创建页面上,我添加了以下 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
作为永久 link 名称。
现在要显示带有 slug 的 URL,我必须将锚标记更改为:
<a href="news/'.$row['permalink'].'" class="btn btn-link"></a>
然后在 htaccess 上,将 RewriteRule ^news/([0-9]+) news.php?P= [NC,L]
更改为 RewriteRule ^news/([0-9a-zA-Z_-]+) news.php?P= [NC,L]
这就是我让它工作的方式。我希望这能帮助有类似问题的人解决他们的问题。