редирект mod_rewrite для несуществующих URL - PullRequest
2 голосов
/ 06 сентября 2011

У меня есть старый сайт, который я приобрел. Новые пользователи по сути получают пользовательскую страницу, созданную для них. Это было сделано менее чем фантастически. В настоящее время он фактически генерирует файл с именем созданного URL-адреса пули и символически связывает его с папкой «/ main /». Очевидно, я хочу изменить это. Мой план состоял в том, чтобы просто перенаправить несуществующие папки в "/ main /" через .htaccess. В настоящее время вот так выглядит мой .htaccess:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|index\.htm)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /main/ [L]

Однако это создает цикл перенаправления. Чего мне не хватает?

Редактировать

На этой ноте я понял, что должен сказать, что хочу сохранить путь ввода. Например, если я введу http://www.mydomain.com/test_person, он должен сохранить этот адрес, но перенаправить все в основную папку, если это имеет смысл.

1 Ответ

3 голосов
/ 27 октября 2011

Вы хотите, чтобы ваше правило не переписывало URL-адреса, уже начинающиеся с main, чтобы не допустить его зацикливания, например:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^main/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^/]+/(.*)$ /main/$1 [L]

[L] на самом деле не означает, что вы думаете [L] должно означать в контексте файла .htaccess.

Вы должны иметь возможность получить исходный URL-адрес, запрашиваемый из переменной среды REQUEST_URI, но обычно нужно передать слаг в цель какПолучите переменную.

RewriteRule ^([^/]+)/(.*)$ /main/$2?user=$1 [QSA,L]

Или передайте все в один скрипт, который интерпретирует URL-адрес и находит верное содержимое для возврата:

RewriteRule ^([^/]+)/(.*)$ /main/index.php?user=$1&path=$2 [QSA,L]
...