#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]’.