2009-12-29 3 views
0

У меня есть PHP-скрипт с именем index.php внутри папки с именем blog. Существует три разных мнения.Apache Mod-Rewrite Вопрос

  1. http://www.myDomain.com/blog/index.php
  2. http://www.myDomain.com/blog/index.php?tags=list категорий
  3. http://www.myDomain.com/blog/index.php?post=name столба

Я хотел бы изменить представление на основе URL.

  1. /блог перенаправляет на номер 1 выше
  2. /блог/имя-категории перенаправляет Numbe 2 выше
  3. /блог/имя-категории/имя-должность перенаправляет на номер 3 выше.

Сейчас у меня есть следующие правила mod_rewrite.

RewriteRule ^blog$ blog/index.php [L] 
RewriteRule ^blog/(.+)/(.+)$ blog/index.php?post=$2 [L] 
RewriteRule ^blog/(.+)$ blog/index.php?tags=$1 [L] 

Это не работает, и я не уверен, почему. Сейчас это всегда перенаправляет к последнему URL:

blog/index.php?tags=$1

И данные GET содержит "index.php".

Кроме того, если добавить косую черту к заключительному правилу, как так:

RewriteRule ^blog/(.+)/$ blog/index.php?tags=$1 [L] 

Все переадресовывает работать нормально. Проблема в том, что мне нужно , чтобы иметь косую черту в конце URL-адреса, если мне нужен вид категории.

Любые идеи, что здесь происходит? как я могу это исправить?


Спасибо за ответы. Я понял, что моя проблема была побочным эффектом наличия моих скриптов внутри папки с именем «блог». Вот как выглядел index.php:

<?php 

define ('BASE_PATH', "../blog/"); 

include_once(BASE_PATH . 'controller/Controller.php'); 

$controller = new Controller(); 
$controller->invoke(); 

Уточнить проблему? Поскольку базовый путь моего сценария был «blog», mod_rewrite переписывал все мои ссылки внутри программы. Переименовав мою папку сценариев в blogScript, она устранила проблему.

ответ

1

В регулярном выражении, . соответствует любому символу (включая / характер), поэтому попробуйте сделать ^blog/([^/]+)$ вместо того, чтобы соответствовать любому символу, за исключением /.

+0

Это для ответа, я буду помнить об этом. char – user182666

1

Вы можете написать это следующим образом.

RewriteRule ^blog/?$ blog/index.php [L] 
RewriteRule ^blog/(.+?)/(.+?)/?$ blog/index.php?post=$2 [L] 
RewriteRule ^blog/(.+?)/?$ blog/index.php?tags=$1 [L] 
+0

Спасибо за ответ! – user182666

Смежные вопросы