RewriteRule и GET

1

Я пытаюсь перенаправить:
от: www.myDomain.com/ca/blog/first-post
к: www.myDomain/ca/​​blog/post.php? url = first-post

Я пишу это в.htaccess:

RewriteRule ^ca\/blog\/(.*)\/?$  ca/blog/post.php?url=$1 [L]

В post.php у меня есть следующее:

$url = $_GET['url'];
echo $url;

Кажется, что он идет в нужном файле: post.php, но эхо дает: post.php, и он должен давать первый пост (или что-то еще, что у меня после блога /)

Я проверил шаблон регулярного выражения здесь: http://regexr.com/3c5ud, и все в порядке.

Я также тестировал htaccess здесь: http://htaccess.madewithlove.be

Но когда я помещаю на сервер, я все равно получаю post.php. Может кто-нибудь объяснить, пожалуйста.

В.htaccess у меня есть другие правила:

# Get rid of .php :
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

# Page of errors:
ErrorDocument 404 /errors/noTrobat.html

# From no www to yes www :
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
  • 0
    Страница является post.php или эхо- post.php ?
  • 2
    Проблема в том, что шаблон также соответствует самому post.php, и его легко исправить. Но я подозреваю, что у вас есть больше правил перезаписи в .htaccess, потому что это обычно вызывает цикл перезаписи и ошибку 500. Пожалуйста, оставьте что-нибудь еще в файле .htaccess, чтобы мы могли порекомендовать правильное решение.
Показать ещё 2 комментария
Теги:
.htaccess
mod-rewrite

1 ответ

1
Лучший ответ

Проблема в том, что ваше текущее правило также соответствует post.php. Итак, вы получите следующее:

www.myDomain.com/ca/blog/first-post
  ->  www.myDomain/ca/blog/post.php?url=first-post
     ->  www.myDomain/ca/blog/post.php?url=post.php

Добавьте правило до вашего текущего правила, чтобы предотвратить переписывание самого post.php:

RewriteRule ^ca\/blog\/post\.php - [L]
RewriteRule ^ca\/blog\/(.*)\/?$  ca/blog/post.php?url=$1 [L]
  • 0
    Я работаю. Спасибо. Вы ставите тире перед [L] Означает ли это: «не соответствует этому» Можете ли вы объяснить, пожалуйста?
  • 0
    @Nrc Рад, что это помогло! Пожалуйста, не забудьте принять ответ. :) - перед [L] просто означает «не меняй это; оставь в покое».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню