mod_rewrite для перенаправления в php файл

Я хотел бы: www.example.com/username

перенаправить на: www.example.com/user.php?id=username

Пытаясь использовать это правило mod_rewrite, я нашел: RewriteRule ^user/([az]+)/?$ User.php? Id=$1

Я много исследовал это и до сих пор не могу заставить его работать. Я начинаю думать, что где-то конфликт... Я не знаю. Я потерялся.

    <VirtualHost 111.111.111.111.:443>
    ServerAdmin webmaster@localhost
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /home/public

    <Directory /home/public>
            Options -Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    RewriteEngine On
    RewriteRule ^user/([a-z]+)/?$ user.php?id=$1

     ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

     CustomLog /var/log/apache2/access.log combined

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</IfModule>

</VirtualHost>

2 ответа

RewriteEngine on
RewriteRule ^user/([^/\.]+)/?$ /user.php?id=$1 [L]

Это приведет к тому, что все /user/username будут перенаправлены на user.php? Id=username. Затем вы можете проверить свой PHP:

if (isset($_GET['user'])) {
  // Check if the username exists.
  // SELECT ... FROM users WHERE username = ..
}

Вместо mod_rewrite вы можете использовать .htaccess для перенаправления 404-ых файлов в файл.php, который обрабатывает URI аналогично $_GET. $_SERVER['REQUEST_URI'] а также preg_match() должно помочь

Другие вопросы по тегам