Я использую mod_rewrite для удобных для поисковых систем URL. У меня есть эта строка, которая отлично работает:
RewriteRule ^Pay ./pay.php [L] #Pay
, но я также хотел бы иметь совпадение, если посетитель вводит http://example.com/pay
(обратите внимание на строчные буквы). Я пробовал использовать NC
, но получаю ошибку 500. Я попытался сделать 2 отдельных правила: один верхний регистр и один нижний регистр, но снова ошибка 500.
Можно ли это сделать в одной строке с помощью регулярного выражения? Что-то типа:
RewriteRule ^([P-p])ay ./pay.php [L] #Pay
Если да, то каков правильный путь? Если нет, как я мог бы сделать это без использования mod_spelling?
RewriteRule ^ Pay ./pay.php [L] #Pay
Вы получаете ошибку 500 из-за бесконечного цикла перезаписи. Если вы просто сделаете вышеуказанный регистр нечувствительным, тогда перезаписанный URL, т.е. /pay.php
соответствует шаблону now без учета регистра ^ Pay
и т. Д.
В этом случае вы можете просто сделать свой шаблон более строгим и совпадение просто "плати",не любой URL-путь, который просто запускает "оплату". Например:
# Pay
RewriteRule ^pay$ pay.php [NC,L]
Я также удалил префикс ./
в подстановке , это не требуется. Кроме того, Apache не поддерживает комментарии в конце строки.
Однако имейте в виду, что при выполнении этой перезаписи без учета регистра, это может привести к дублированию контента .
Я не знаю простого правила перезаписи без учета регистра, но ваша попытка сопоставить P или p очень близка к правильной. Просто опустите тире и скобки - это работает. Это то, что я тестировал для вас (как можно проще):
RewriteRule ^/[Pp]ay /pay.php
Символы в квадратных скобках - это просто альтернативы для 1 символа, поэтому
RewriteRule ^[Pp][Aa][yY] /pay.php
будет соответствовать любой комбинации нижнего и верхнего регистра. Однако я не уверен, почему ваша версия не сработала, потому что это означает «сопоставить любой символ между P и p», который должен быть P, Q, R, ... Z, some-punktuation, a, b , с ... п. Я вашу версию не тестировал.
Скобки () не должны причинять никакого вреда, они просто означают «извлечь все, что вы там найдете, и сделать это доступным как '$ 1' в строке замены».
Предложение: попробуйте со статическими файлами. Создайте test.html с фиктивным содержимым (например, «это test.html»), попробуйте получить к нему доступ в браузере через веб-сервер, который вы тестируете. Затем добавьте правило
rewriterule ^/best.html$ /test.html
и войдите в best.html - вы должны увидеть test.html. Продолжайте вносить небольшие изменения в правила перезаписи, пока не найдете ту часть, которая пошла не так.