Проверка пустого URI запроса с помощью.htaccess
Мне нужно перенаправить запрос с
www.mysite.com/?querystring=data
в
www.mysite.com/dir/phpfile.php/?querystring=data
Это означает, что он должен быть переведен только URL с пустым request_uri (например,
www.mysite.com/css/style.css
не должен переводиться) и с непустой строкой запроса (например, главная страница
www.mysite.com/
не должен переводиться).
Я написал этот код
RewriteCond %{HTTP_HOST} ^www.mysite.com$ [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^/?(.*)$ www.mysite.com/$1 [QSA]
Но это не работает. Любое предложение?
2 ответа
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.+)$ [NC]
RewriteRule ^$ /dir/phpfile.php/ [L,QSA,R=302]
Как только вы убедитесь, что он работает нормально, замените R=302
в R=301
, Избегать использования R=301
(Постоянное перенаправление) во время тестирования ваших правил mod_rewrite.
Правило, которое у вас есть, содержит доменное имя без протокола, оно будет выглядеть как URI или путь к файлу mod_rewrite. Кроме того, вы ничего не переписываете, так как $1
обратная ссылка на группировку (.*)
в вашем совпадении, которое должно быть ничем, так как ваше условие говорит, что URI может быть только /
, Вы, вероятно, хотите что-то вроде:
RewriteCond %{HTTP_HOST} ^www.mysite.com$ [NC]
RewriteRule ^/?$ /dir/phpfile.php/ [L,R]
Строка запроса будет автоматически добавлена в конец. Удалить R
если вы не хотите перенаправлять браузер извне (таким образом, изменяя URL в адресной строке), или заменить его на R=301
если вы хотите постоянный редирект.