htaccess mod_rewrite: только одно правило для всех URI - PullRequest
1 голос
/ 02 декабря 2011

Я прочитал несколько уроков о переписывании модов, но не могу найти то, что ищу.Мне нужен только один RewriteRule для всех моих URI, который выполняет следующие действия:

  • Я хочу, чтобы символ '-' был заменен на '_'.Поэтому, если у меня есть example.com/page-hello, его следует переписать в example.com/page_hello
  • Каждый URL должен быть заменен на .php позади него.Так что, если у меня есть example.com/page, его следует переписать на example.com/page.php

Итак, мой вопрос: как это сделать?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Для этого вам понадобятся отдельные правила.Первое правило будет опираться на цикл mod_rewrite до тех пор, пока не будет тире, второе будет проверять, нет ли тире, и не существует ли это файла, а затем добавить php в конец:

# Replace - with _
RewriteRule ^(.*)-(.*)$ /$1_$2

# When there are no more -, check if the file exists
RewriteCond %{REQUEST_URI} !-
RewriteCond %{REQUEST_URI} !\.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ %{REQUEST_URI}.php [L]

Эти 2 правилаURL-адрес, подобный следующему:

http://example.com/asd-fgh-jkl-/qwe-rty-uio

и перепишите URI:

/ asd_fgh_jkl_ / qwe_rty_uio.php

0 голосов
/ 03 декабря 2011

Если у вас есть более одного «-» в том, что вы хотите переписать, это может быть проблемой. Чтобы решить эту проблему, используйте директиву RewriteMap, которая выполняет внешний «фильтр». Смотрите здесь . С сайта, с акцентом на то, что вы можете посмотреть:

Программа внешнего перезаписи

MapType: prg, MapSource: путь файловой системы Unix к действительному обычному файлу. Здесь источником является программа, а не файл карты. Чтобы создать его , вы можете использовать язык по вашему выбору , но результатом должна быть исполняемая программа (либо объектный код, либо сценарий с волшебным трюком cookie "#! / Path / to / interpreter"). в первой строке).

Эта программа запускается один раз, когда запускается сервер Apache, а затем связывается с механизмом перезаписи через дескрипторы файлов stdin и stdout.

Итак, мой совет: создайте очень простую программу на python, которая выполняет поиск / замену и вызывает ее с помощью директивы RewriteMap, затем добавьте к ней php.

...