каталоги, файлы и переменные htaccess - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь получить что-то похожее на $ _SERVER ["PATH_INFO"], но странные проблемы с сервером мешают мне его использовать ...

В моем приложении ссылки могут выглядеть как

www.domain.com/folder/file/variable
www.domain.com/folder/file
www.domain.com/file/variable or
www.domain.com/file/

С помощью .htaccess я пытаюсь добраться до нужных страниц, а не перенаправлять на index.php или аналогичные.

Пока у меня есть это, которое не работает:)

RewriteRule ^(.+)$ /$1.php # page only
RewriteRule ^(.+)/(.+)$ /$1.php?x=$2 # page + variable
RewriteRule ^(.+)/(.+)$ /$1/$2.php # folder / page 
RewriteRule ^(.+)/(.+)/(.+)$ /$1/$2.php?x=$3 # folder / page + variable

Я уверен, что мне нужно использовать RewriteCond% {REQUEST_FILENAME} -f, чтобы проверить, является ли запрос именем файла или каталога ... но мне не удалось заставить его работать ...

Переменные могут содержать все странные символы - поэтому я сопоставляю их с точкой ... Может быть, я должен попытаться сопоставить имена файлов / папок только с az (поскольку я не думаю, что они когда-либо будут содержать что-либо, кроме az, _ или -).

Любая помощь очень ценится, так как она уже почти два дня мучений:)

Ответы [ 3 ]

1 голос
/ 03 августа 2011

Обратное правило переписывания, наиболее специфичное для первого.

RewriteEngine On
RewriteRule ^(.+)/(.+)/(.+)$ /$1/$2.php?x=$3 [L]

# RewriteRule to check that the file is exists here
RewriteCond %{REQUEST_URI} ^(.+)/(.+)$
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}.php -f
RewriteRule ^(.+)/(.+)$ /$1/$2.php [L]

# If file is not exists, then check by put to the variable
RewriteRule ^(.+)/(.+)$ /$1.php?x=$2 [L]
RewriteRule ^(.+)$ /$1.php [L]
0 голосов
/ 07 августа 2011

благодаря подсказке @ LazyOne я смог решить эту проблему.

Файл htaccess теперь выглядит примерно так:

RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)$ /$1/$2.php?x=$3
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/$ /$1/$2.php
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)$ /$1.php?x=$2
RewriteRule ^([-a-zA-Z0-9_]+)/$ /$1.php

все пути к папкам или файлам должны заканчиваться на "/"в то время как переменная не должна.это не проблема в моей структуре - но может быть бесполезным для других.

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

Большинство людей / фреймворков передают все, что не имеет расширения, заданного одному php-контроллеру, который затем решает, что делать.Я думаю, что одна из причин, по которой большинство людей идут по этому пути, заключается просто в том, насколько сложен mod_rewrite!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...