Почему правило перезаписи URL htaccess не работает? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать красивый URL для моего сайта.

У меня есть этот тип URL: game.php?game=some-game, и я хочу показать его так: game/some-game. Я уже пытался писать и переписывать правила в htaccess безуспешно.

Сначала я подумал, что файл htaccess не работает, но введенные пользователем страницы ошибок работают правильно. Я попытался использовать флаг QSA безрезультатно.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?game/(.*?)/?$ /game.php?game=$1 [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /game\.php\?game=([^\&\ ]+)
RewriteRule ^/?game\.php$ /game/%1? [L,R=301]

ErrorDocument 400 /Hacknet-INC/400.php
ErrorDocument 401 /Hacknet-INC/401.php
ErrorDocument 403 /Hacknet-INC/403.php
ErrorDocument 404 /Hacknet-INC/404.php
ErrorDocument 410 /Hacknet-INC/410.php
ErrorDocument 500 /Hacknet-INC/500.php

#Serve .htc files correctly, for IE fixes
AddType text/x-component .htc

php_value upload_max_filesize 300M
php_value post_max_size 10M
php_value max_execution_time 200
php_value max_input_time 200

1 Ответ

0 голосов
/ 11 января 2019

Боюсь, вы поступаете неправильно, но нет! На самом деле это обычная проблема, с которой люди сталкиваются при первой работе с правилами переписывания Apache.

Итак, вы получили скрипт - game.php -, в котором имена игр вводятся через параметр строки запроса game, поэтому game.php?game=some-game.

Теперь вы хотите, чтобы ваши URL выглядели красиво, маскируя их по шаблону game/some-game.

Проблема в том, что вы пытаетесь сделать это, перенаправляя необработанные URL-адреса скриптов на хорошие, и это почти то же самое, что делает любой, кто впервые делает подобные вещи.

Ключ в том, что вы хотите замаскировать URL. То есть вы хотите одеть сырой уродливый URL как что-то более приятное.

Это не работает, потому что вместо маскировки с уродливым вы делаете это наоборот - вы маскируете с уродливым.

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

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

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

Правило для достижения этого просто так:

RewriteRule ^game/([^/]+) game.php?game=$1 [L]

См. Пример этого здесь: https://htaccess.madewithlove.be? Share = f6863821-b64c-5873-9bd4-9f13b6e4736e

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...