#.htaccess #rewrite
#.htaccess #url-перезапись
Вопрос:
Я хочу перенаправить весь трафик, идущий в любой файл .php, на index.php.
Например:
domain.com/test.php
domain.com/test/test.php
.. следует перейти к domain.com/index.php. Аналогично:
www.domain.com/test.php
www.domain.com/test/test.php
.. следует перейти к www.domain.com/index.php.
Я добавил следующее правило:
RewriteRule (..com)(/.)?/(.*.php) $1/index.php
который, согласно онлайн-тестеру регулярных выражений, должен дать мне правильный результат, но когда я использую его в реальном htaccess, правило, похоже, игнорируется, и вместо этого выдается ошибка 404.
Что я делаю не так?
Ответ №1:
RewriteRule не совпадает с host по своему первому параметру. Попробуйте следующее:
RewriteEngine on
RewriteCond %{REQUEST_URI} index.php$
RewriteCond %{QUERY_STRING} arg=something
RewriteRule .php$ /index.php? [R]
RewriteCond %{REQUEST_URI} !index.php$
RewriteRule .php$ /index.php? [R]
Надеюсь, это поможет.
Комментарии:
1. Спасибо за вашу помощь, но, к сожалению, это все еще не работает, это просто выдает ошибку 404 вместо перенаправления на index.php.
2. Есть идеи, почему это так? Или если есть какой-либо другой подход, который я должен предпринять?
3. Выполняет ли ваш index.php для файла выполняется перенаправление любого типа или у вас есть другие правила в вашем
.htaccess
? Правило должно работать, есть ли у вас доступ к основной конфигурации apache для включенияRewriteLog
, в противном случае вы подтвердили, чтоmod_rewrite
это включено? Кроме того, я добавил условие, позволяющее избежать цикла перенаправления, о котором я забыл прошлой ночью, а также правило для проверки аргументов querystringindex.php
.4. Кроме того, в конце
?
правил удаляются строки запросов, если вы хотите, чтобы они поддерживались через перенаправление, просто удалите?
Ответ №2:
Попробуйте этот код:
Options FollowSymlinks -MultiViews
RewriteEngine on
# internally redirect all .php files to index.php
RewriteCond %{REQUEST_URI} !^/ index.php [NC]
RewriteRule .php$ /index.php? [L,NC]
# remove all query string from /index.php
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^index.php$ /index.php? [L,R]
Комментарии:
1. Привет, спасибо за ваш совет, но опять же, к сожалению, он возвращается только с ошибкой 404, вместо того, чтобы фактически переписать URL для перехода index.php. Есть идеи, почему это так? У меня также есть куча блоков spambot и IP-блоков, которые также не работают. Могут ли они быть связаны?
2. Это вполне может быть так. Я бы посоветовал, пожалуйста, изучить ваш доступ. войдите, чтобы увидеть, что вы получаете, зачем загружать этот URL.
3. Также не могли бы вы скопировать / вставить код еще раз из моего ответа выше. Я внес незначительную правку.
4. Привет, анубхава, еще раз спасибо за предложения. Страница по-прежнему возвращает ошибку 404. Причина этого мода в том, что наш сайт был недавно взломан, и я пытаюсь перенаправить 404 запроса на предыдущий спам-файл php на index.php. Я также хотел сделать, например, /index.php?arg=something, чтобы также вернуть index.php , но я не знаю, как это сделать. Очень ценю вашу помощь.
5. Извините за поздний ответ, пришлось лечь спать, так как было очень поздно. Я только что отредактировал свой ответ выше, чтобы отбросить всю строку запроса из /index.php как вы просили.