модификация переписывает и статические страницы

возможно исключить URL, проанализированный модификацией, переписывают? мой .htaccess имеет, переписывают правила как

RewriteRule ^contact contact_us.php

и пара большего количества статических страниц.

в настоящее время мой сайт не имеет использования причины проблем http://domain.com/user.php?user=username, но теперь я должен переписать к:

http://domain.com/username

Я попробовал:

RewriteRule ^(.*)$ user.php?user=$1 [L]

но весь мой сайт прекращает работать...

возможно избежать, анализируют мои статические страницы как контакт/канал/и т.д., который рассматривают как имена пользователей?

отредактируйте для соответствия david req:

это - мой фактический .htaccess файл:

RewriteEngine On
Options +Followsymlinks

RewriteRule ^contact contact_us.php [L]
RewriteRule ^terms terms_of_use.php [L]
RewriteRule ^register register.php [L]
RewriteRule ^login login.php [L]
RewriteRule ^logout logout.php [L]
RewriteRule ^posts/(.*)/(.*) viewupdates.php?username=$1&page=$2 
RewriteRule ^post(.*)/([0-9]*)$ viewupdate.php?title=$1&id=$2 
RewriteRule ^(.*)$ profile.php?username=$1 [L] 

также я включил журналу modrewrite свой первый file:http://pastie.org/1044881

1
задан greenbandit 14 July 2010 в 23:25
поделиться

2 ответа

Сначала поместите правила перезаписи для статических страниц и добавьте к ним флаг [L] :

RewriteRule ^contact contact_us.php [L]
...

затем после те, используйте ваше правило перезаписи имени пользователя:

RewriteRule ^(.*)$ user.php?user=$1 [L]

(надеюсь, ни у кого нет имени пользователя контакт ).

РЕДАКТИРОВАТЬ : на основе опубликованных вами выходных данных журнала (которые, как я предполагаю, соответствуют неудачной попытке доступа к странице контакта ... верно?), попробуйте изменить правило перезаписи контакта на

RewriteRule ^contact$ contact_us.php [L]

или

RewriteRule ^contact contact_us.php [L,NS]

, то есть добавьте $ , чтобы шаблон соответствовал только буквальному URL контакту , или добавьте флаг NS , чтобы он не применялся к подзапросам. Согласно выходным данным журнала, похоже, что произошло то, что Apache переписывает контакт в contact_us.php , а затем выполняет внутренний подзапрос для этого нового URL. Все идет нормально. Странно то, что шаблон ^ contact снова совпадает с contact_us.php , «преобразовывая» его в contact_us.php , то есть то же самое, что интерпретирует Apache как сигнал к тому, что он должен полностью игнорировать правило.Теперь я бы подумал, что Apache имеет смысл игнорировать правило только в подзапросе, но я не уверен, игнорирует ли весь процесс перезаписи и оставляет исходный URL-адрес, / свяжитесь с , как есть. Если это так, внесите одно из предложенных мной изменений, чтобы исправить это.

РЕДАКТИРОВАТЬ 2 : отрывок из журнала перезаписи мне кое-что напомнил: я бы предложил создать правило перезаписи

RewriteRule ^([^/]+)$ user.php?user=$1 [L]

, поскольку косые черты не должны встречаться ни в каких именах пользователей. (Верно?) Или вы могли бы сделать

RewriteRule ^(\w+)$ user.php?user=$1 [L]

, если имена пользователей могут включать только символы слов (буквы, цифры и подчеркивание). По сути, создайте регулярное выражение, которое соответствует только любой последовательности символов, которая может быть действительным именем пользователя, но не соответствует URL-адресам изображений или файлов CSS / JS.

1
ответ дан 2 September 2019 в 23:02
поделиться

Параметры -f и -d для RewriteCond проверяют, является ли текущее совпадение файлом или каталогом на диске.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ....
1
ответ дан 2 September 2019 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: