Я пытаюсь создать SEO дружественных URL-адресов с помощью файла htaccess и PHP. Но это не работает.
Я попробовал код ниже в localhost (работает XAMPP)
RewriteEngine On
RewriteBase /real/
RewriteRule ^property-details/([0-9a-zA-Z]+) property-details.php?pid=$1 [NC, L]
Существуют разные способы достижения одинаковых результатов, но это даст вам руководство.
Сначала активируйте mod_rewrite, раскомментировав эту строку в файле httpd.conf или apache2.conf:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
Измените AllowOverride с none на All для своего каталога www
<Directory />
AllowOverride All
Require all denied
</Directory>
Перезапустите Apache:
sudo apachectl restart
или же
sudo service apache2 restart
В папке www создайте файл .htaccess и добавьте следующее:
# | SEO URL
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
Затем в вашем файле index.php:
<?php
$url_params=get_url_params();
// then access your url_params
if (isset($url_params[1]))
{
switch ($url_params[1])
{
case 'login':
echo "<h1>Login</h2>";
break;
case 'contact':
echo "<h1>Cantact</h2>";
break;
default:
echo "<h1>Home</h2>";
break;
}
}
function get_url_params($site_url='')
{
$base_url=explode("/", $site_url);
$request = $_SERVER['REQUEST_URI'];
$url_params = explode("/", $request);
$delete_extensions=array('.html','.htm');
$data[]=array();
foreach ($base_url as $b)
{
unset( $url_params[array_search( "$b", $url_params )] );
}
foreach ($url_params as $u)
{
foreach ($delete_extensions as $e){
$u=str_replace($e, "", $u);
}
$data[]=$u;
}
return $data;
}
?>
[NC, L]
Вы должны удалить пространство между вашим RewriteRule
флаги. Это приведет к ошибке 500 Internal Server — в этом случае вам следует проверить журналы ошибок на предмет более значимой ошибки. Это должно быть написано как:
[NC,L]
Пробелов нет
ОБНОВИТЬ:
Чтобы mod_rewrite работал в отдельных каталогах .htaccess, FollowSymLinks
также должен быть включен (если его еще нет). В самом верху вашего файла .htaccess добавьте:
Options +FollowSymLinks