Хорошо. Во-первых, я знаю, что есть несколько ответов на такой вопрос, как здесь, в StackOverflow, но они только помогли мне частично. К сожалению, многие ответы очень специфичны и помогают только в случае оригинального искателя. Поэтому было бы неплохо, если бы я мог получить объяснение, которое также может быть расширено для вопросов других пользователей (и для меня, если мне нужно использовать это на других страницах). Тем не менее, моя проблема заключается в следующем:
Я пытаюсь использовать mod_rewrite, чтобы упростить мои URL-адреса, чтобы мои пользователи могли легко вводить адресную строку. Поэтому мне нужно отредактировать.htaccess, чтобы скрыть внутренние расширения.php и отредактировать все ссылки на код, который нужно выполнить. Правила перезаписи, которые я нашел для работы, следующие:
Options +FollowSymLinks -MultiViews
RewriteEngine On
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://localhost/website/$1 [R=301,L]
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://localhost/website/$1 [R=301,L]
# Assume php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]
Они относятся только к внешнему перенаправлению, но для меня я не думаю, что внутреннее перенаправление было необходимо, так как я в порядке, просто написав краткую форму URL-адресов. Нет причин скрывать расширение, если вы просто добавляете их обратно в html-формы, правильно?
Я рисую страницы пользователей, получая имя пользователя с помощью метода GET.
www.webpage.com/userpage.php?view=username
Я хочу, чтобы URL-адрес стал
www.webpage.com/user/username
Когда я наконец получил правило, которое сработало для этого, файл CSS не загружался. Изображения могут быть загружены или не зависят от правила, которое я использовал. Я отменил тот, который я написал, потому что он не только делал это, но и добавлял пути в другое место.
RewriteRule ^(.*[^/]) userpage.php?view=$1 [QSA,L]
В основном это правило применяло "/userpage/" ко всем ссылкам в домене, независимо от того, что я ввел в адресную строку. И когда я набрал полный текст с помощью userpage.php, он переписал это на страницу пользователя/пользовательскую страницу/пользователя.
RewriteRule ^user/(\w+)/?$ userpage.php?view=$1
Было очень похоже, делали те же результаты, но не показывали изображения. Я знаю, что проблема здесь связана с относительными путями, но просто изменение всех путей к абсолюту удалит всю переносимость кода.
Я понимаю, что мне действительно нужно, чтобы это было ТОЛЬКО страницы с/user/на пути, который нужно переписать.
Я не только хотел бы понять, какие условности мне нужно применить к правилу, но только изменить то, что я хочу, а не все остальное, но мне очень понравилось бы, если бы кто-то мог сказать мне, есть ли способ для страницы быть недоступным по всему пути.
Например, www.fullpath.com/user/username отображает страницу, но www.fullpath.com/userpage?view=username будет недоступным.
Сохраните свой.htaccess следующим образом:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
## Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ $1 [R=302,L,NE]
RewriteRule ^user/([^/]+)/?$ userpage.php?view=$1 [L,QSA,NC]
# To internally forward /dir/file to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
Также добавьте это в раздел <head>
на странице HTML: <base href="/"/>
чтобы каждый относительный URL был разрешен с этого URL-адреса, а не URL-адрес текущей страницы
domain.com/page
? Существует ли page.php
? domain.com/page.php
ли domain.com/page.php
?
<base href=>
). И переписываниеuser/username
является одним из самых распространенных RewriteRules на самом деле. Не включает в себя работу над THE_REQUEST или QUERY_STRING. Пожалуйста, опишите, что именно вы попробовали, и как что-то «сломалось».