Попытка получить дружественный URL, но ничего не происходит

Я пытаюсь скрыть часть URL и показать только переменные, такие как каталоги.

Например: изменить с https://somesite.com/users.php?user=Alex в https://somesite.com/Alex/ или из https://somesite.com/users.php?user=Alex&tab=photos в https://somesite.com/Alex/photos/,

мой .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# hide GET variables from url for messages page.
RewriteRule ^messages/(.*) messages.php?message=$1 [L,QSA]

# hide users.php and transforming variables in directories.
RewriteRule ^/%1 users.php?user=$1 [L,QSA]
</IfModule>

Но если я получу доступ https://somesite.com/users.php?user=Alex ничего не происходит, и если я получу доступ https://somesite.com/Alex/ ошибка 404 возвращается.

2

Решение

Используйте этот код для скрипта users.php:

RewriteRule  (.*) users.php?user=$1 [L,QSA]

Это правило должно быть после правила сообщений в этом порядке, чтобы работать в обоих случаях.

1

Другие решения

Пожалуйста, напишите этот код в вашем файле .htaccess

    RewriteEngine On    # Turn on the rewriting engine
RewriteRule    ^([A-Za-z0-9-]+)/?$    users.php?user=$1    [NC,L]
RewriteRule    ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$    users.php?user=$1&tab=$2    [NC,L]
1

Кажется, что самое простое решение — отправить каждый запрос к index.php? Q = $ 1 или другому script.php для управления путем:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]
</IfModule>

index.php может проверить оба случая:

<?php

$q = explode('/',$_GET['q']);
$query=$q[0];


if($query=='messages'){
$message = $q[1];
require "messages.php";
}else{
$user = $query;
require "users.php";
}

?>
1

Я не вижу, как мог последний RewriteRule делай что хочешь.
Вы можете использовать это вместо:

RewriteRule ^([^/]+)/?$ users.php?user=$1 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ users.php?user=$1&tab=$2 [L,QSA]

Изменить: Вы также можете использовать mod_rewrite, чтобы перенаправить тех, кто использует старый URL-адрес на новый URL-адрес. Это должно работать:

RewriteCond %{QUERY_STRING}     ^user=([^&]+)$
RewriteRule ^/users.php$        /%1/               [L,R=301]

RewriteCond %{QUERY_STRING}     ^user=([^&]+)&tab=([^&]+)$
RewriteRule ^/users.php$        /%1/%2/            [NC,L,R=301]

Альтернатива; у вы можете прочитать REQUEST_URI переменную в php (она должна содержать адрес перед перезаписью) и определить, был ли он старым. Если это так, то перенаправьте на новый.

1
По вопросам рекламы [email protected]