Как переписать URL, чтобы его можно было ввести в строку URL? - PullRequest
1 голос
/ 02 мая 2011

У меня есть следующая страница: www.domain.com/index.php?route=information/contact, и я хотел бы переписать ее так, чтобы она отображалась как: www.domain.com/contact, но есть еще ...

Что важно, это когда кто-товведите www.domain.com/contact, он перенаправляет их на www.domain.com/index.php?route=information/contact, который, в свою очередь, переписывается как www.domain.com/contact.

Я ценю любую помощь!Спасибо.

Редактировать: Чтобы уточнить

Я хочу, чтобы пользователи могли вводить www.domain.com/contact и перенаправляться на www.domain.com/index.php?route=information/contact.

Однакопосле перенаправления я бы хотел чисто эстетическое переписывание , чтобы www.domain.com/index.php?route=information/contact отображалось как www.domain.com/contact (так же, как они вводили.)

Возможно ли это?

Редактировать: Мой файл .htaccess в настоящее время ...

Options +FollowSymlinks

# Prevent Directoy listing 
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini)">
 Order deny,allow
 Deny from all
</FilesMatch>

# SEO URL Settings
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php?_route_=$1 [L,QSA]

RewriteCond %{QUERY_STRING} ^route=common/home$
RewriteCond %{REQUEST_METHOD} !^POST$
RewriteRule ^index\.php$ http://www.domain.com/? [R=301,L]


### Additional Settings that may need to be enabled for some servers 
### Uncomment the commands by removing the # sign in front of it.
### If you get an "Internal Server Error 500" after enabling, then restore the # as this means your host 

doesn't allow that.

# 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This 

may work to disable it:
# php_flag register_globals off

Ответы [ 3 ]

1 голос
/ 02 мая 2011

AFAIK, вы не можете заставить адресную строку показывать адрес, отличный от того, с которого страница была загружена.Если вы хотите, чтобы пользователь видел www.domain.com/contact в адресной строке при просмотре страницы, вам нужно заставить сервер фактически возвращать содержимое страницы (не перенаправление) при запросе этого URL.

Я думаю, что выможет быть неправильное понимание перезаписи URL: это не для изменения того, что пользователь видит в адресной строке, а для изменения того, что сервер видит, когда пользователь получает запрос.Если вы создаете правило перезаписи, которое меняет /foo на /bar, то, когда пользователь вводит /foo в своем браузере, сервер будет обрабатывать его как запрос на /bar.

Что вы хотитеЯ думаю, что когда пользователь вводит www.domain.com/contact в своем браузере, сервер должен обрабатывать его как запрос на www.domain.com/index.php?route=information/contact, но браузер должен по-прежнему отображать симпатичный URL, который набрал пользователь.Способ сделать это - просто переписать /contact на /index.php?route=information/contact на сервере.Перенаправление не требуется;пользователь просто запрашивает симпатичный URL, а сервер обрабатывает запрос на основе эквивалентного уродливого и отправляет обратно получившуюся страницу.

1 голос
/ 02 мая 2011

Попробуйте эти правила в своем файле .htaccess:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{THE_REQUEST} ^GET\s/+index\.php [NC]
RewriteCond %{QUERY_STRING} ^route=information [NC]
RewriteRule . /warranty? [L,NC,R=301]

RewriteRule ^warranty$ /index.php?route=information/contact [L,NC]

L гарантирует, что URL пользователя в браузере не изменится, а перенаправление произойдет изнутри .

1 голос
/ 02 мая 2011

Ваш вопрос крайне неясен, и я подозреваю, что виновата неопытность.

Со следующим правилом:

RewriteRule /?(.*) index.php?route=information/$1

строка адреса будет читать "/ contact", но индексировать.php будет вызываться с помощью внутренней перезаписи.

С небольшой модификацией:

RewriteRule /?(.*) index.php?route=information/$1 [R]

строка адреса будет читать "/index.php?route=information/contact" и index.phpбудет вызываться после перенаправления.

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

...