.htaccess/mod_rewrite

На самом деле я хочу запустить ~name/how вместо ~name/how.php.

Я внес следующие изменения в .htaccess:

# If the requested URI does not contain a period in the final path-part
RewriteCond %{REQUEST_URI} !(.[^./]+)$
# and if it does not exist as a directory
RewriteCond %{REQUEST_fileNAME} !-d
# and if it does not exist as a file
RewriteCond %{REQUEST_fileNAME} !-f
# then add .html to get the actual filename
RewriteRule (.*) $1.php [L]

Но он будет работать как:

~name/~name/how

И при каждом нажатии на ссылку она будет добавляться ~name в URL ex. http://ip/~name/~name/~name/serach.

Можете ли вы сказать мне, что не так в .htaccess?


person Community    schedule 23.05.2009    source источник


Ответы (2)


Вы используете относительные, а не абсолютные пути. Теперь ваши страницы думают, что вы находитесь по пути ~name/. Вы можете установить <base href> на своих страницах.

Вы могли бы упростить это, используя «DirectoryIndex index.php» для сопоставления /whatever с /whatever/index.php

Это может помочь: Как использовать переписывающее правило apache mod_rewrite без изменения относительные пути

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

Честно говоря, ваши ссылки беспорядочны, поэтому вы запутались. Я настоятельно рекомендую создать очень простой тестовый сайт, чтобы правильно организовать пути. При необходимости используйте абсолютные и относительные пути. Удалите базовый href, так как он только больше вас сбивает с толку. После того, как вы запустите его, попробуйте переписать снова, помня, что ваши относительные пути могут потребоваться обновить, если глубина пути изменится при перезаписи.

person SpliFF    schedule 23.05.2009
comment
На самом деле я новичок в моде переписать /.htaccess. Итак, не могли бы вы уточнить, что на самом деле нужно изменить ?? - person ; 23.05.2009
comment
Хорошо, короче говоря, это не проблема перезаписи как таковая. Ваше изменение приводит к тому, что html-файл кажется расположенным под подпутью, поэтому ваши относительные пути в вашем HTML указывают на неправильное место. Вы можете просто изменить свои относительные ссылки на абсолютные или изменить свой макет (например, с предложением DirectoryIndex), чтобы относительные ресурсы были на самом деле там, где они кажутся. - person SpliFF; 23.05.2009
comment
привет, пожалуйста, проверьте это 74.220.215.241/~laborfa2 и нажмите "как это работает", это будет работать, но если щелкнуть правой кнопкой мыши по «Лос-Анджелесу», в этот раз появится ошибка. ?area='Los" rel="nofollow noreferrer">74.220.215.241/~laborfa2/lf/main/com/search.php?area='Los Angeles' - person ; 25.05.2009
comment
как это работает, это относительная ссылка href=как ссылка Лос-Анджелес является абсолютной href=/los-angeles/. Вы должны понимать разницу. Абсолютные пути начинаются с начала веб-корня, а относительные начинаются с того места, где вы сейчас находитесь. Использование mod_rewrite может часто сбивать с толку проблему «где я», потому что ваш веб-браузер и веб-сервер могут не согласовываться (потому что вы обманули сервер). - person SpliFF; 25.05.2009
comment
‹VirtualHost :80› DocumentRoot /lf/main/com ServerName 74.220.215.241/~laborfa2 ServerAlias 74.220.215.241/~laborfa2 RewriteEngine на #RewriteLogLevel 2 #RewriteLog logs/rewrite.log RewriteCond %{DOCUMENT_ROOT} %{REQUEST_FILENAME}.php -f Правило перезаписи ^/(.)(/?)$ /$1.php [L] Правило перезаписи ^/([a-zA-Z]+)([a-zA-Z0 -9_]{3,15})(/?)$ /profile.php?fairid=$1$2 [L] Правило перезаписи ^/([a-zA-Z]+)([a-zA-Z0-9_]{ 3,15})/([az]*)(/?)$ /$3.php?fairid=$1$2 [L] ‹/VirtualHost› он отлично работает в Linux (htt.vhost), но когда я вставляю его в . htaccess не работает. Итак, какие изменения требуются выше. - person ; 25.05.2009
comment
поместите это в свой вопрос или начните новый. комментарии — плохое место для кода. - person SpliFF; 25.05.2009

Это проблема разрешения URL-адресов: относительные URL-адреса всегда разрешаются по базовому URL-адресу, который является URL-адресом текущего ресурса, если не указано иное. Поэтому, если вы находитесь на /~name/foo и есть ссылка, указывающая на ~name/bar (это просто относительный URL-путь!), она преобразуется в /~name/~name/bar. Но если вы укажете на /~name/bar, это не будет разрешено, так как это уже абсолютный URL-путь.

Таким образом, вы можете избежать этого, используя абсолютные URL-пути (начинающиеся с /) или изменив базовый URL-адрес (см. Элемент BASE HTML). Но последнее повлияет на любую относительную ссылку URL, а не только на те, которые начинаются с относительного пути URL.

person Gumbo    schedule 26.08.2009