Я использую Rewrite Rule в htaccess, чтобы получить данные страницы по slug.
Я делаю это вручную, добавляя строки в .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !www\.example\.co\.il$ [NC]
RewriteRule ^(.*)$ http://www.example.co.il/$1 [L,R=301]
ErrorDocument 404 /404.php
RewriteRule ^עמוד-מסוים$ /page.php?id=1 [L]
RewriteRule ^דוגמא-לעמוד$ /page.php?id=2 [L]
RewriteRule ^דוגמא-נוספת$ /page.php?id=3 [L]
RewriteRule ^טקסט-כלשהו$ /page.php?id=4 [L]
RewriteRule ^צרו-קשר$ /contact.php [L]
RewriteRule ^blog$ /blog.php [L]
Это хорошо работает, но мне нужно каждый раз добавлять новую строку .htaccess.
моя таблица БД содержит Id и Slug (и другую информацию)
и мой page.php использует $ _GET [‘id’] и затем выбирает другие данные из БД по этому идентификатору.
Я попробовал что-то вроде этого:
.Htaccess:
RewriteRule ^page/([^/]*)$ /page.php?id=$1 [L]
page.php:
$id=$_GET['id'];
if(is_int($id)==false){ // if slug was enterd
$result=$mysqli->query("SELECT `id` FROM `pages` WHERE `slug`='$id' limit 1");
while($row=mysqli_fetch_assoc($result)){
$id=$row['id'];
}//query
}
Но URL выглядит не так, как я хочу (добавление / page / к URL)
Я попробовал это также:
.Htaccess:
RewriteRule ^/([^/]*)$ /page.php?id=$1 [L]
но это создает проблемы с другими URL на моем сайте (которые не связаны с page.php)
Как я могу заставить его работать без добавления строки htaccess каждый раз?
РЕДАКТИРОВАТЬ:
когда я пытаюсь это .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !www\.example\.co\.il$ [NC]
RewriteRule ^(.*)$ http://www.example.co.il/$1 [L,R=301]
ErrorDocument 404 /404.php
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]
RewriteRule ^צרו-קשר$ /contact.php [L]
RewriteRule ^blog$ /blog.php [L]
Я получаю сообщение об ошибке на всех страницах. Если я перемещаюсь вверх по RewriteRule ^ /? ([^ /] +) $ /Page.php?id=$1 [L], то будет работать только файл page.php (блог и контакт не будут работать) работать), а также не WWW URL-адреса не будут работать хорошо.
Вы можете попробовать добавить некоторые условия, например:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]
отфильтровать все существующие файлы и каталоги.
Кроме того, вы можете рассмотреть очистить ваш параметр $ id, прежде чем вставить его в запрос
Нашел душу. Это работает идеально:
ErrorDocument 404 /404.php
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^צרו-קשר$ /contact.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]