RegExp htaccess в php

1

Я хочу перенаправить все мои запросы на мою страницу index.php и получить там URL.

Вот мой код файла .htaccess.

RewriteEngine On
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Мой вопрос: зачем мне давать $1 после url=?

Благодарю.

  • 1
    Это обратная ссылка на то, что захвачено (.*) .
  • 0
    Спасибо за ваш ответ.
Теги:
.htaccess

3 ответа

1
Лучший ответ

Когда вы используете фигурные скобки (.*), Это означает, что вы захватываете группу. вы можете использовать контент с $1. если вы не используете $1 тогда вы не получите URL-адрес здесь: url=$1. Подробнее: http://www.regular-expressions.info/brackets.html

  • 0
    Большое спасибо.
1

Исходный URL-адрес может быть получен из $_SERVER['REQUEST_URI'] поэтому, строго говоря, вам не требуется mod_rewrite для его передачи явно.

Например, это набор правил, используемый структурой Lumen:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Независимо от того, если вы предпочитаете передавать его в любом случае, вам не нужно фиксировать его явно, поскольку полное совпадающее выражение всегда находится в $0 автоматически:

RewriteRule ^.*$ index.php?url=$0 [QSA,L]
  • 0
    Большое спасибо.
1

$1 совпадает с тем, что является захватом (между parens), в этом случае URL-адрес страницы, к которой они стремятся.

Это позволяет вам увидеть, какую страницу они пытаются посетить в вашем php-скрипте, используя $_GET['url'].

Без этого вы все равно можете получить запрошенный URL-адрес несколькими способами, но это самый простой и, скорее всего, правильный.

  • 0
    Большое спасибо.
Сообщество Overcoder
Наверх
Меню