#apache #.htaccess #mod-rewrite #url-rewriting
#apache #.htaccess #mod-перезапись #url-перезапись
Вопрос:
Если запрос предназначен для www.website.com/index.php
того, чтобы я хотел www.website.com/login/index.php
отображаться. Но ЕСЛИ запрос предназначен для www.website.com/index.php?any-query
того, чтобы я хотел www.website.com/index.php?any-query
отображаться. Другими словами, если URL-адрес содержит какой-либо запрос, он отвечает именно на этот адрес. В противном случае все должно пройти index.php в каталоге /login/. Надеюсь, я объяснил себя более четко. Спасибо.
ОТРЕДАКТИРУЙТЕ для большей ясности
Я объясняю, как выглядит проблема. Когда я нажимаю на тег <a href="http://www.website.com/index.php?r=adm/lostpwd"></a>
(в файле /login/index.php
), на который он отвечает http://www.website.com/login/index.php?r=adm/lostpwd
, вместо этого я бы хотел, чтобы он отвечал точно с http://www.website.com/index.php?r=adm/lostpwd
РЕДАКТИРОВАТЬ 2 >>> Текущий /.htaccess:
RewriteEngine On
RewriteCond %{THE_REQUEST} s/ (?:index.php)?sHTTP [NC]
RewriteRule ^ /login/index.php [R=301,L]
Анализ текущих перенаправлений
Текущая ситуация следующая. Когда я посещаю website.com
301 https://website.com/ server_redirect permanent https://website.com/login/index.php
200 https://website.com/login/index.php
На странице /login/index.php
, когда я нажимаю <a href="http://website.com/index.php?r=adm/lostpwd"></a>
301 http://website.com/index.php?r=adm/lostpwd server_redirect permanent https://website.com/index.php?r=adm/lostpwd
200 https://website.com/index.php?r=adm/lostpwd
Когда я отправляю форму на странице /login/index.php
, создается ссылка для единого входа ( header("Location: " . $link);
). Это генерируемый трафик:
302 https://website.com/login/index.php server_redirect temporary https://website.com/index.php?r=adm/ssoamp;login_user=usernameamp;time=1000amp;token=abcde
302 https://website.com/index.php?r=adm/ssoamp;login_user=usernameamp;time=1000amp;token=abcde server_redirect temporary https://website.com/index.php
301 https://website.com/index.php server_redirect permanent https://website.com/login/index.php
200 https://website.com/login/index.php
В /login/index.php:
Это генерация ссылки для единого входа
if (password_verify($password_entered, $password)) {
$time = time();
$key = "abcde";
$token = "abcde";
$link = "https://www.website.com/index.php?r=adm/ssoamp;login_user=".$user."amp;time=".$time."amp;token=".$token;
header("Location: " . $link);
exit;
}
Комментарии:
1. @anubhava Если я прокомментирую, перенаправление больше не будет работать так, как я хочу
2. Только случай 3 выше обрабатывается моим предложенным правилом. Случаи 1 и 2 управляются с помощью PHP-кода. Теперь, пожалуйста, уточните, какой случай вызывает проблемы и каково желаемое поведение.
3. @anubhava Пожалуйста, посмотрите, как я изменил анализ текущих перенаправлений
4. Я считаю, что ваш href должен быть:
<a href="https://website.com/index.php?r=adm/lostpwd"></a>
5. Также случай № 2 в последнем разделе, т.Е.
302 https://website.com/index.php?r=adm/ssoamp;login_user=usernameamp;time=1000amp;token=abcde server_redirect temporary https://website.com/index.php
Является загадкой, потому что показанный PHP-код отличается. Есть какой-то другой PHP-код, который делает это
Ответ №1:
Вы можете использовать этот простой код в site root .htaccess:
RewriteEngine On
RewriteCond %{THE_REQUEST} s/ (?:index.php)?sHTTP [NC]
RewriteRule ^ /login/index.php [R=301,L]
Убедитесь, что в этом .htaccess нет другого правила и в каталоге нет .htaccess login/
.
Комментарии:
1. Извините @anubhava : (
http://www.website.com/login/index.php?r=adm/lostpwd
Ссылка перенаправляется хорошо. Но следующее не:http://website.com/index.php?r=adm/ssoamp;login_user=xxxamp;time=xxxamp;token=abc
2.
http://website.com/index.php?r=adm/ssoamp;login_user=xxxamp;time=xxxamp;token=abc
останется неизменным в соответствии с приведенным выше правилом. Протестируйте в новом браузере. Также вы можете прокомментировать здесь в любое время, и я бы ответил, нет необходимости удалять знак принятия3. Я прошу прощения за знак принятия. К сожалению, последняя ссылка не работает. Это достигается не щелчком по тегу a, а с
header("Location: ". $link)
помощью php4. Извините, но, пожалуйста, закомментируйте
header("Location:". $link)
код, поскольку мы полностью обрабатываем перенаправления в .htaccess. Если она существует для определенной цели, я предлагаю вам показать рассматриваемый php-код и разъяснить эту особую логику.5. Пожалуйста, посмотрите, как я изменил анализ текущих перенаправлений