Изменить отображаемую структуру URL с помощью mod_rewrite НЕ работает - PullRequest
0 голосов
/ 28 июля 2011

Мне нужно изменить структуру отображаемого клиентского URL. Я не слишком опытен в использовании регулярных выражений и кодирования для файла .htaccess. По сути, у меня есть структура, которая выглядит примерно так:

http://www.example.com/catalog/index.php?cat=lt&sec=lt1-1&id=nmlt10.  

Я бы хотел, чтобы это отображалось в адресной строке как:

http://www.example.com/catalog/lt/lt1-1/nmlt10.  

Это то, что я придумал, но это никак не отразилось:

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\$ /catalog/index.php?cat=$1&sec=$2&id=$3 [L]

Я протестировал и удалил все другие правила в файле .htaccess, чтобы убедиться, что ничего не было перезаписано. Я нахожусь на сервере Apache общего хостинга и знаю, что mod_rewrite включен, потому что я использую его для перезаписи не-www в www-URL. Я не получаю и 500 сообщений об ошибках, я просто не замечаю никаких изменений вообще. Я не уверен, где я иду не так, поэтому, надеюсь, кто-то может направить меня в правильном направлении.

Ответы [ 2 ]

0 голосов
/ 01 августа 2011

Наконец-то нашел решение, которое сработало:

RewriteEngine On
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?cat=$1&sec=$2&id=$3 [QSA,L]

Оцените ответ LazyOne, чтобы вывести меня на правильный путь; Однако при использовании:

RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?cat=$1&sec=$2&id=$3 [QSA,L]

Я не смог перейти по ссылкам, которые уже были размещены на сайте, он рассматривал разные каталоги как переменные, например, при просмотре изображения или файла, скажем:

folder/folder/image.png

Это будет захватывать «папка» - «папка» - и «изображение» в качестве переменных. Я понимаю, почему это происходит, если у кого-то есть другое решение или объяснение, пожалуйста, дайте мне знать, я всегда готов учиться.

0 голосов
/ 28 июля 2011

Поскольку ваш .htaccess находится в корневой папке сайта, вы должны использовать правило:

RewriteEngine On
RewriteBase /

RewriteRule ^catalog/([^/]+)/([^/]+)/([^/]+)$ /catalog/index.php?cat=$1&sec=$2&id=$3 [QSA,L]

Если вы поместите его в .htaccess в папку /catalog/, тогда вы можете удалить catalog из него:

RewriteEngine On

RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?cat=$1&sec=$2&id=$3 [QSA,L]

Я проверил правило перед публикацией - у меня отлично работает.


Это правило (такое же, как указано выше) проверяет, является ли URL файлом или папкой, и будет перезаписывать, только если оно не:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?cat=$1&sec=$2&id=$3 [QSA,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...