URL-адрес перенаправления .htaccess с параметрами

0

Я пытаюсь сделать URL моего сайта более доступным для чтения, но у меня проблемы с этим.

Это образцы URL-адреса, который выглядит сейчас:

http://example.com/
http://example.com/index.php
http://example.com/index.php?page=home
http://example.com/index.php?page=profile&uid=483ec3a0-7e0f-32e6-f357-ac9311204246

Они должны выглядеть так:

http://example.com/
http://example.com/home/
http://example.com/profile/483ec3a0-7e0f-32e6-f357-ac9311204246/

Вот содержание моего файла.htaccess:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# external redirect from /view.php?id=1 to /view/id/1
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?page=([^\s&]+)&uid=([^\s&]+) [NC]
RewriteRule ^ /%1/%2/? [L,R=301]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?page=([^\s&]+) [NC]
RewriteRule ^ /%1/? [L,R=301]

# internal forward from /view/id/1 to /view.php?id=1
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?page=$1&uid=$2 [L,QSA]
RewriteRule ^([^/]+)/?$ /index.php?page=$1 [L,QSA]

Он переписывает правильный URL-адрес, например http://example.com/index.php?page=profile&uid=483ec3a0-7e0f-32e6-f357-ac9311204246http://example.com/profile/483ec3a0-7e0f-32e6-f357-ac9311204246/ но я получаю каждый раз ошибку 404. Если я попытаюсь вызвать http://example.com/ или http://example.com/home/ я получаю ошибку 500.

В чем моя проблема?

Теги:
.htaccess
mod-rewrite

2 ответа

0
Лучший ответ

Вам нужно другое правило перенаправления без параметров, и вам нужно добавить некоторые условия в свои внутренние правила пересылки, чтобы /index.php не соответствовал:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# external redirect from /view.php?id=1 to /view/id/1
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?page=([^\s&]+)&uid=([^\s&]+) [NC]
RewriteRule ^ /%1/%2/? [L,R=301]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?page=([^\s&]+) [NC]
RewriteRule ^ /%1/? [L,R=301]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php($|\ ) [NC]
RewriteRule ^ /? [L,R=301]

# internal forward from /view/id/1 to /view.php?id=1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?page=$1&uid=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /index.php?page=$1 [L,QSA]
  • 0
    Хорошо спасибо. Я не получаю 500 ошибок, но я все еще получаю 404 ошибки.
  • 0
    @ JohannLöwen Если вы закомментируете первые три правила перенаправления, то даст ли вам http://example.com/index.php?page=profile&uid=483ec3a0-7e0f-32e6-f357-ac9311204246 404?
Показать ещё 2 комментария
0

Кажется, вы сталкиваетесь с проблемой бесконечного цикла, вызывающего 500. Это связано с тем, что последние 2 правила маршрутизации не пропускают файлы и каталоги.

Вставьте это правило чуть выше # internal forward линии:

# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
  • 0
    Спасибо, ребята, вы великолепны. Решение было суммой ваших обоих ответов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню