Я пытаюсь перенаправить:
от: 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>
Проблема в том, что ваше текущее правило также соответствует 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]
-
перед [L]
просто означает «не меняй это; оставь в покое».
post.php
или эхо-post.php
?