htaccess: условие для проверки наличия строки в запросе

#php #apache #.htaccess #mod-rewrite #url-rewriting

#php #apache #.htaccess #mod-переписать #url-переписывание

Вопрос:

Мне нужно написать условие для правила URL-адреса mod rewrite, чтобы определить, какая страница выполняется.

Используемый RewriteRule мной метод работает нормально, но проблема в том, что мне нужно использовать одно и то же правило для двух разных URL-адресов.

 RewriteRule ^testing/([^/]*)$ /index.php?url=$1amp;name=amp;submit=submit [NC,L] 
RewriteRule ^testing/([^/]*)$ /test.php?url=$1amp;name=amp;submit=submit [NC,L]
  

Без каких-либо установленных условий перезаписи при добавлении example.com/testing/ в браузер используется первый RewriteRule in htaccess , независимо от того, включен ли я index.php или test.php .

Вот несколько из тех RewriteCond , которые я пробовал:
RewriteCond %{REQUEST_FILENAME} /test.php$
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} (test.php)/ [NC]
RewriteCond %{THE_REQUEST} s/ (test.php)/ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z] /test.php/

И вот полный код файла htaccess:

 Options  FollowSymLinks
RewriteEngine on
## check if on index.php ##
RewriteCond %{THE_REQUEST} ^.*/index.php/.*$ ## not working ##
## if on index.php do this ##
RewriteRule ^testing/([^/]*)$ /index.php?url=$1amp;name=amp;submit=submit [NC,L]  
## check if on test.php ##
RewriteCond %{THE_REQUEST} ^.*/test.php/.*$ ## not working ##
## If on test.php do this ##
RewriteRule ^testing/([^/]*)$ /test.php?url=$1amp;name=amp;submit=submit [NC,L]
  

Как я могу получить первый (index.php ) rewriteRule для работы index.php , но когда на test.php странице игнорируется первое правило и используется второе?

Спасибо 🙂

РЕДАКТИРОВАТЬ: просто для уточнения. Я не хочу перенаправлять. Я просто хочу изменить значение testing/ в зависимости от того, на какой странице я нахожусь. Как я уже упоминал, RewriteRule уже работает нормально.

Комментарии:

1. Вы не можете этого сделать. С вашей ссылкой /testing/... невозможно узнать, для index.php или для test.php . Вы можете изменить свою ссылку с помощью кода или имени testingi и testingt , например, или testing/i... и т. Д.

2. Для этого и должно быть условие. Идея в том, что если index.php это указано в имени скрипта, то выполните правило, если нет, то не делайте этого. Если test.php в имени скрипта, то выполните это правило. если нет, то не делайте этого.

3. В %{HTTP_REFERER} URL? Потому что вы переписываете свою ссылку, когда используете ее, а не имя скрипта…

4. Нет, я не хочу переписывать имя скрипта. Я хочу проверить, содержит ли имя скрипта строку. Если это так, то перепишите URL.

5. Вы не понимаете… Apache переписывает вашу ссылку, когда вы ее используете. Не при запуске вашего скрипта. Иногда вы можете прочитать имя скрипта %{HTTP_REFERER} , когда пользователь нажимает на ссылку (извините за мой плохой английский)

Ответ №1:

 ## If on index.php ##
RewriteRule    "^/index.php$"  "/index.php?url=$1amp;name=amp;submit=submit" [R,L]
  

Попробуйте это

Комментарии:

1. Извините, @Elby, я думаю, вы, возможно, немного неправильно поняли. Правило работает нормально. URL-адрес после перезаписи мода будет выглядеть следующим образом: example.com/testing/youtube.com (youtube.com это всего лишь пример)

Ответ №2:

 RewriteEngine On

#Checking if /index.php/ apears in URI
RewriteCond %{REQUEST_URI} ^(.*)/index.php/(.*)$ [NC]
RewriteRule ^(.*)$ testing/index.php?url=$1amp;name=amp;submit=submit [NC]
  

это покажет вывод index.php?url=sth1/index.php/sth2 вместо sth1/index.php/sth2

Удачи

Комментарии:

1. Я не хочу перенаправлять. Мне нужно изменить значение testing/ в зависимости от страницы, на которой я нахожусь.

2. @turrican_34, не могли бы вы подробнее объяснить на примере, пожалуйста?

3. Я обновил комментарии в полном коде htaccess. Какую часть вы не понимаете?

4. @turrican_34, что именно представляет собой запрос пользователя и какой файл вы хотите отобразить?

5. Как я уже упоминал, мне нужно в основном изменить значение testing/ . Если index.php есть в имени скрипта / запросе (условие), тогда используйте RewriteRule: RewriteRule ^testing/([^/]*)$ /index.php?url=$1amp;name=amp;submit=submit [NC,L] . Если test.php есть в имени скрипта / запросе (условие), тогда используйте RewriteRule: ‘RewriteRule ^тестирование/([^/]*)$ / test.php?url=$1amp;name=amp;submit=отправить [NC,L]’.