RewriteRule то же имя, что и каталог - PullRequest
0 голосов
/ 19 июля 2011

Для моего сайта у меня есть каталог с именем /test/.Я хочу переписать www.example.com/nl/test и www.example.com/nl/test/ на определенную страницу (test.php).

Некоторые глобальные условия (для всех правил)

RewriteRule ^(nl|en)$ http://www.example.com/$1/ [NC,R]
RewriteBase /

RewriteRule ^(nl|en)$ $1/ [NC,R]

RewriteCond $1 !^(en|nl)$
RewriteRule ^([a-z]{2})/(.*)$ en/$2 [L,R=302]

RewriteRule ^(nl|en)/(.*)$ $2?language=$1&%{QUERY_STRING} [L]

RewriteRule ^sale$ sale.php
RewriteRule ^valentine$ valentine.php

Некоторые условия для перезаписи+ папка

RewriteRule ^test/$ test.php

Перенаправление www.example.com/nl/test/ правильное.Параметр языка также корректно переписан.

Для второго перенаправления (версия без завершающего слеша) я не могу заставить это работать.

RewriteRule ^test$ test.php

Теперь мой URL переписан как www.example.com/test/?language=nl

Может кто-нибудь дать мне совет или подсказку, чтобы это исправить?Я не могу изменить имя каталога, так как есть несколько внешних URL-адресов, ссылающихся на этот каталог.

1 Ответ

2 голосов
/ 19 июля 2011

Это правило выполнит всю работу (вместо 4-х строк, которые у вас есть): оно будет переписывать /nl/test и /nl/test/ в /test.php?language=nl.

RewriteRule ^(en|nl)/test/?$ /test.php?language=$1 [NC,QSA,L]

ПРИМЕЧАНИЯ:

Флаг [QSA] сохранит любую существующую строку запроса (поэтому нет необходимости в &%{QUERY_STRING}).


Полный .htaccess:

Options +FollowSymLinks -MultiViews
DirectorySlash Off

RewriteEngine On
RewriteBase /

RewriteRule ^(nl|en)$ http://www.example.com/$1/ [NC,R=301,L]

RewriteCond $1 !^(en|nl)$
RewriteRule ^([a-z]{2})/(.*)$ /en/$2 [R=302,L]

RewriteRule ^(nl|en)/(.*)$ /$2?language=$1 [NC,QSA,L]

RewriteRule ^sale/?$ sale.php [QSA,L]
RewriteRule ^valentine/?$ valentine.php [QSA,L]
RewriteRule ^test/?$ test.php [QSA,L]

ПРИМЕЧАНИЯ:

Нет необходимости в RewriteRule ^(nl|en)$ $1/ [NC,R], поскольку у вас уже есть RewriteRule ^(nl|en)$ http://www.example.com/$1/ [NC,R=301,L]. Это делает ту же работу.

...