2013-07-26 2 views
2

Я хочу, чтобы просто иметь URL:Htaccess RewriteRule работает, но браузер не отображает дружественный URL

example.com/connect/admin/create

переадресацией:

example.com/connect /admin/create.php

у меня есть следующий код на файл .htaccess:

RewriteEngine On 
RewriteBase/
RewriteRule ^connect/admin/create$ http://example.com/connect/admin/create.php [R=301,L,NE] 

И он перенаправляет правильно. Проблема в том, что браузер теперь отображает

example.com/connect/admin/create.php

Когда я все еще хочу его на дисплей:

example.com/connect/admin/create 

мне нужно добавить что-то еще, чтобы сделать .htaccess?

Спасибо

+0

Это потому, что у вас есть жесткая переадресация через 'R = 301'. Если вы не хотите, чтобы он перенаправлял браузер, просто удалите его, и он будет перезаписываться молча. Кроме того, вам нужно удалить «http: // example.com/' –

+0

. За ваш ответ я меняю код на: RewriteRule^connect/admin/create $ /connect/admin/create.php [L, NE] и результат все тот же. – user2623997

+0

Вам также необходимо удалить ведущий '/' из '/ connect/admin/create.php' Абсолютный путь приведет к попытке перенаправления. –

ответ

1

Ваше оригинальное правило перезаписи содержит явное перенаправление через R=301. Этот флаг нужно будет удалить. Во-вторых, правая сторона RewriteRule (цель) включает http://example.com/, которая также будет принудительно перенаправлять браузер. Вместо этого следует использовать только относительный путь на правой стороне:

RewriteEngine On 
RewriteBase/
RewriteRule ^connect/admin/create$ connect/admin/create.php [L,NE] 

Это может быть сделано в более общем виде, если вы также будете иметь дополнительные действия внутри connect/admin, от которого вы хотели бы лишить .php:

# Capture the action into $1 and pass it to the redirect target. 
RewriteRule ^connect/admin/([^/.]+)/?$ connect/admin/$1.php [L,NE]