Несколько правил перезаписи htaccess с удобными URL - PullRequest
0 голосов
/ 01 апреля 2012

Мой мобильный сайт (крошечная настраиваемая CMS, созданная на основе WordPress) имеет домашнюю страницу, страницу блога, страницу новостей, страницу о программе и страницу контактов, где ./blog ./news ./about и ./contact являются действительными папками. Домашняя страница , Блог и Новости разбиты на страницы. О и Контакт - это отдельные страницы, без нумерации страниц.

Мне нужны правила переписывания htaccess для выполнения следующих действий (A) и (B). Я только прогрессировал с (A), и файл htaccess находится в корне сайта.

(А)

  • m.website.com/index.php?page=1 перезаписывает m.website.com
  • m.website.com/index.php?page=2 перезаписывает m.website.com/page/2 и т. Д.
  • m.website.com/blog/index.php?page=1 переписывает в m.website.com/blog
  • m.website.com/blog/index.php?page=2 перезаписывает m.website.com/blog/page/2 и т. Д.
  • m.website.com/news/index.php?page=1 переписывает в m.website.com/news
  • m.website.com/news/index.php?page=2 перезаписывает m.website.com/news/page/2 и т. Д.

Проблемы: Ниже приведено то, что я использую для вышеперечисленного, но пока я работал только для домашней страницы . Я не знаю, как объединить правила, чтобы включить блог и новости страницы. Кроме того, он дублирует мои ссылки, потому что оба m.website.com и m.website.com/page/1 используются. Мне нужно избавиться от /page/1 везде. Разбивка на страницы должна начинаться только со страницы 2. Я пытался избавиться от него с помощью RedirectMatch, но он не работал, поэтому я закомментировал его.

RewriteEngine On  
RewriteBase /
RewriteRule ^page/(.*) index.php?page=$1 [NC]
#RedirectMatch 301 ^/page/1/$ http://m.website.com/

(B) * * тысячу шестьдесят-семь

  • У меня уже есть файл permalink.php , который принимает красивые URL-адреса и возвращает их postIDs
  • Ссылка на дополнительную информацию для каждой статьи на домашней странице, в блоге или на странице новостей будет иметь формат http://m.website.com/2012/03/the-post-title
  • При нажатии htaccess запрашивает permalink.php со строкой /2012/03/the-post-title, чтобы получить postID, затем открывает http://m.website.com/article.php?id=postID , но адрес в адресной строке будет http://m.website.com/2012/03/the-post-title, и это показывает статья полностью, будь то домашняя страница, страница блога или страница новостей.

Проблема: Я искал, и я не совсем уверен, как поступить (B) выше, но я знаю, что это возможно. В конце все правила для A и B будут в одном файле htaccess в корне сайта.

Спасибо

1 Ответ

2 голосов
/ 01 апреля 2012

Это должно помочь вам.Похоже, вы сделали большую часть этого, так что нет ничего, чтобы сделать.

RewriteEngine On  
RewriteBase /

# you do not need a rewrite for the root as you should have index.php
# as your default document and page 1 as your default page

RewriteRule ^page/1/?$                    / [NC,L,R=301]
RewriteRule ^page/(\d+)/?$                index.php?page=$1 [NC,L]

# you do not need a rewrite for blog as you should have index.php as your
# default document and page 1 as your default page

# you do not need a rewrite for news as you should have index.php as your
# default document and page 1 as your default page

RewriteRule ^(blog|news)/page/1/?$        $1 [NC,L,R=301]
RewriteRule ^(blog|news)/page/(\d+)/?$    $1/index.php?page=$2 [NC,L]

######################################################################
################## ADD YOUR PERMALINK.PHP CODE HERE ##################
######################################################################

ОБНОВЛЕНИЕ Чтобы эффективно превратить / 2012/03 / post-title в postID, вы должны иметь возможность попросить вашу базу данных сделать это для вас, так как этоЕдинственное, что знает ответ.Так что вы можете использовать RewriteMap http://httpd.apache.org/docs/2.3/rewrite/rewritemap.html#dbd. Я никогда не делал этого сам, и я бы советовал против этого.Не потому, что я знаю, что с этим есть проблема, у меня просто плохое чувство по этому поводу.

Альтернатива, которую я бы отстаивал, - это просто сделать что-то вроде этого:

RewriteRule ^(\d{4})/(\d{2})/([^/]+))/?$     article.php?postIdentifier=$1/$2/$3 [L]

Затем в article.php перейдите в базу данных и используйте информацию в postIdentifier, чтобы получить правильную статью.

Имеет смысл?

...