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.