.htaccess - изменение URL - RewriteRule не работает
Я довольно новичок в этом, надеюсь, вы поможете мне решить эту проблему.
У меня есть структура URL, которая получает идентификатор из базы данных и показывает URL-адрес, как это:
www.website.com/post.php?P=18
Я хотел бы представить URL как:
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 ответа
Я думаю, что важно делиться такой информацией для других, у которых может быть та же самая проблема, так что здесь идет.
Эта проблема:
[1] Ссылка, которая выглядела так: www.example.com/news.php?P=1
Ссылка должна выглядеть так www.example.com/news/1
Затем ссылка должна в конечном итоге отображать текст вместо идентификатора. 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] Будет сделано сейчас.
Задача теперь заключалась в том, чтобы использовать слизень вместо идентификатора. На странице создания поста я добавил следующий 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]
Вот так я и получил это на работу. Я надеюсь, что это поможет людям с подобными проблемами исправить их.
Попробуйте с ниже,
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^post/(\w+)$ post.php?P=$1 [L]