url перезаписать оба www to non- www and удалить индекс параметра. php? url при использовании phpmvc - PullRequest
1 голос
/ 24 января 2020

Я хочу перенаправить www.myDomain.com/index.php?url=controller/methode/parameter на mayDomain.com/controller/methode/parameter

это мой код htaccess:

RewriteEngine on

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

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

проблема заключается в использовании www at начальный URL, index.php?url= появляются в URL! есть ли способ не показать это?

1 Ответ

0 голосов
/ 24 января 2020

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

Чтобы удалить параметр URL, вам нужно дополнительное перенаправление. Однако это предполагает, что все ваши внутренние URL-адреса используют канонический формат ie. /controller/methode/parameter. (Перенаправление предназначено только для любых обратных ссылок.)

Попробуйте выполнить следующее:

RewriteEngine on

# Remove "url" parameter if requested directly
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^url=([^&])*
RewriteRule ^index\.php$ http://example.com/%1 [R=301,L]

# Canonical www to non-www redirect
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

# Front-controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Условие, которое проверяет переменную окружения REDIRECT_STATUS, необходимо для предотвращения перезаписи l oop, поскольку мы хотим перенаправлять только прямые запросы, а не запросы, которые уже были переписаны.

Перед тестированием вам необходимо очистить кеш браузера.

...