mod_rewrite + "pages / 123 / some-text" -> "showpage.php? index = 123 & title = some-text" - PullRequest
0 голосов
/ 15 сентября 2010

Как видно из заголовка, как я могу использовать .htaccess и mod_rewrite, чтобы изменить это?

"pages / 123 / some-text" на "showpage.php? Index = 123 & title = some-text"

Я начал с этого:

RewriteEngine On
Options +FollowSymLinks 
RewriteBase /

RewriteCond %{REQUEST_FILENAME} pages/(.*)
RewriteRule (.*) /showpage.php?index=%1 [R]

, что позволяет мне хотя бы получить параметр для индекса, но это не получится, если я не создам пустой каталог с именем pages.

1 Ответ

1 голос
/ 15 сентября 2010

Вы можете просто извлечь соответствующие части URL в самом RewriteRule:

RewriteEngine On
Options +FollowSymLinks 
RewriteBase /

RewriteRule ^pages/([^/]+)/(.+)$ /showpage.php?index=$1&title=$2 [R]

Обратите внимание, что флаг R вызывает внешнее перенаправление, это то, что вы хотите? Если нет, вы должны удалить его:

RewriteRule ^pages/([^/]+)/(.+)$ /showpage.php?index=$1&title=$2

Или, если вы хотите, чтобы внешний перенаправление было безопасным, рекомендуется использовать флаг L, чтобы перенаправление применялось немедленно (и добавьте статус 301, если перенаправление постоянное):

RewriteRule ^pages/([^/]+)/(.+)$ /showpage.php?index=$1&title=$2 [R=301,L]

Кроме того, если вы хотите, чтобы заголовок был необязательным, вы можете сделать это тоже:

RewriteCond &title=$3 ^(&title=.+)$
RewriteRule ^pages/([^/]+)(/(.+))?$ /showpage.php?index=$1%1
...