htaccess Rewriterule для нескольких параметров - PullRequest
0 голосов
/ 20 января 2020

У меня есть URL, который выглядит следующим образом:

https://www.example.com/project/api/read.php?uid=1234567&dvc=ABCDE

Я хотел бы установить sh правило перезаписи, которое превращает URL в:

https://www.example.com/project/api/read/1234567/ABCDE

Моя попытка выглядит как это:

RewriteEngine On    # Turn on the rewriting engine
RewriteRule ^read/([0-9a-zA-Z_-]*)([0-9a-zA-Z_-]*)$ read.php?uid=$1&dvc=$2 [NC,L,QSA]

1 Ответ

1 голос
/ 20 января 2020
RewriteRule ^read/([0-9a-zA-Z_-]*)([0-9a-zA-Z_-]*)$ read.php?uid=$1&dvc=$2 [NC,L,QSA]

Вам не хватает sla sh между сегментами пути в шаблоне RewriteRule .

Предполагается, что файл .htaccess расположенный внутри подкаталога /project/api (как подразумевается вашей директивой), вместо этого попробуйте следующее:

# MultiViews must be disabled for the rewrite to work
Options -MultiViews

# Turn on the rewriting engine
RewriteEngine On

RewriteRule ^read/([\w-]+)/([\w-]*)$ read.php?uid=$1&dvc=$2 [L,QSA]

\w - это сокращенный класс символов, такой же, как [0-9a-zA-Z_], к которому мы добавляем дефис (-).

Поскольку URL /read отображается непосредственно в файл /read.php MultiViews должны быть отключены, в противном случае mod_negotiation "перезаписывает" запрос в /read.php (перед mod_rewrite) без каких-либо Параметры URL.

Обратите внимание, что я изменил квантификатор с * на + в первом сегменте пути, так как это может показаться обязательным в вашем URL?

Ваш пример URL ( /read/1234567/ABCDE) показывает цифры в первом сегменте пути и буквы во втором. Если это точное отражение типа URL, то регулярное выражение следует сделать более строгим, чтобы проверять только этот тип данных.

В стороне:

RewriteEngine On    # Turn on the rewriting engine

Обратите внимание, что Apache не поддерживает комментарии в конце строки. Это может быть «ОК» в этом случае, потому что текст после RewriteEngine On просто игнорируется. В других случаях вы можете получить внутреннюю ошибку сервера 500.

...