То, что я пытался достичь, - это заставить мой файл.htaccess переписать ВСЕ URL.
Однако независимо от того, что я делаю, я не могу игнорировать существующие каталоги. И я имею в виду, действую так, как будто их не существует.
Например, скажем, у меня есть следующая файловая структура:
/
dir1
file1.php
dir2
file2.php
.htaccess
И предположим, что я хочу перенаправить весь трафик на dir1/file1.php?url=path
.
Это никогда не работает для меня, если путь является существующим каталогом.
Например, если я перехожу к url/path/stuff/dir2
, работает "перенаправление", но URL-адрес в адресной строке изменяется на url/path/stuff/dir2/?url=dir2
по какой-то непостижимой причине.
Вот мой .htaccess
:
Options -MultiViews
Options -Indexes
Options +FollowSymLinks
# so navigating to a url with a trailing slash won't cause problems
DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dir1/file1.php?url=$1 [QSA,L]
Вы (обновлено).htaccess говорит: IF (это не существующий файл) THEN {перепишите URL}. Похоже, вы хотите
RewriteEngine on
RewriteCond %{REQUEST_URI} !dir1/file1.php
RewriteRule ^(.*)$ dir1/file1.php?url=$1 [QSA,L]
В этом случае RewriteCond просто предотвращает бесконечный цикл. RewriteRule применяется один раз и только один раз. Модуль перезаписи будет циклически перемещаться по всем правилам, пока цикл не приведет к изменению URI.
path/dir2
приводит к изменению адресной строки на path/dir2/?url=dir2
а я не хочу, чтобы она менялась. (Он все еще «показывает» dir1/file1.php
, так что это хорошо.)