2015-01-09 4 views
0

Я пытаюсь сделать URL-адрес моего сайта более доступным для чтения, но у меня проблемы с этим..htaccess перенаправить дружественный 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-ac9311204246 ->http://example.com/profile/483ec3a0-7e0f-32e6-f357-ac9311204246/, но я получаю каждый раз ошибку 404. Если я попытаюсь позвонить http://example.com/ или http://example.com/home/, я получаю 500 ошибок.

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

ответ

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? –

+0

Да, если я прокомментирую первые три правила, значит, он отлично работает. –

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

Спасибо, ребята, вы здоровы. Решение было суммой ваших обоих ответов. –

Смежные вопросы