возможно исключить 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
Сначала поместите правила перезаписи для статических страниц и добавьте к ним флаг [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.
Параметры -f
и -d
для RewriteCond
проверяют, является ли текущее совпадение файлом или каталогом на диске.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ....