Проверка пустого 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 если вы хотите постоянный редирект.

Другие вопросы по тегам