Можно ли использовать .htaccess для отправки URL-адресов с шестизначным числом скрипту, но обрабатывать все остальные недопустимые URL-адреса как 404-е?

StackOverflow https://stackoverflow.com/questions/73123

  •  09-06-2019
  •  | 
  •  

Вопрос

Можно ли использовать .htaccess для обработки всех шестизначных URL-адресов, отправляя их в скрипт, но обрабатывая каждый другой недопустимый URL-адрес как ошибку 404?

Например:

http://mywebsite.com/132483

был бы отправлен в:

http://mywebsite.com/scriptname.php?no=132483

но

http://mywebsite.com/132483a or
http://mywebsite.com/asdf

было бы обработано как ошибка 404.

В настоящее время у меня это работает с помощью пользовательского скрипта PHP 404, но это немного запутанно.Мне кажется, что .htaccess мог бы быть более элегантным решением, но я не смог выяснить, возможно ли это вообще.

Это было полезно?

Решение

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^([0-9]{6})$ scriptname.php?no=$1 [L]
</IfModule>

Чтобы сохранить чистый URL-адрес

http://mywebsite.com/132483

при подаче scriptname.php используйте только [Л].Использование [R=301] перенаправит вас на ваш scriptname.php?no=xxx

Возможно, вы найдете это полезным http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/pdf/

Другие советы

В вашем файле htaccess поместите следующее

RewriteEngine On
RewriteRule ^([0-9]{6})$ /scriptname.php?no=$1 [L]

Первая строка включает движок mod_rewrite.Скобки () помещают содержимое в $ 1 - последовательная () заполнит $ 2, $ 3...и так далее.В [0-9]{6} говорится, что ищите строку длиной ровно в 6 символов, содержащую только символы 0-9.

[L] в конце делает это последнее правило - если оно применяется, обработка правила остановится.

О, ^ и $ отмечают начало и конец входящего uri.

Надеюсь, это поможет!

Да, это возможно с помощью mod_rewrite.В Интернете есть масса хороших руководств по mod_rewrite, быстрый поиск в Google должен найти ваш ответ в кратчайшие сроки.

По сути, что вам нужно сделать, так это убедиться, что используемое вами регулярное выражение ищет только цифры и никаких других символов, и убедиться, что его длина равна 6.Затем вы перенаправите на scriptname.?no= с указанным вами номером.

Надеюсь, это поможет!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top