Я хочу перенаправить все мои запросы на мою страницу index.php
и получить там URL.
Вот мой код файла .htaccess
.
RewriteEngine On
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Мой вопрос: зачем мне давать $1
после url=
?
Благодарю.
Когда вы используете фигурные скобки (.*)
, Это означает, что вы захватываете группу. вы можете использовать контент с $1
. если вы не используете $1
тогда вы не получите URL-адрес здесь: url=$1
. Подробнее: http://www.regular-expressions.info/brackets.html
Исходный 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]
$1
совпадает с тем, что является захватом (между parens), в этом случае URL-адрес страницы, к которой они стремятся.
Это позволяет вам увидеть, какую страницу они пытаются посетить в вашем php-скрипте, используя $_GET['url']
.
Без этого вы все равно можете получить запрошенный URL-адрес несколькими способами, но это самый простой и, скорее всего, правильный.
(.*)
.