Мой код:
RewriteEngine on
RewriteBase /
RewriteRule ^article/([a-z]+)/?$ index.php?page=article&name=$1 [L]
RewriteRule ^([a-z]+)/?$ index.php?page=$1 [L]
Я использую WAMP и настроил виртуальный хост.
В моем index.php есть код для передачи страницы и проверки, существует ли она (в базе данных). Если нет, отобразить сообщение об ошибке. Работает нормально.
Например: http://mysite/contactus/
Но это не будет работать, если я использую имя каталога в качестве имени_страницы в URL. Например: http://mysite/images/
. При этом отобразится ошибка «страница не найдена» (т. Е. Проверяется база данных и страница не найдена, поэтому отображается «не найдено»). Но он не будет отображать изображения, CSS (связанный файл) на странице. Кроме того, в адресной строке отображается http://mysite/images/?page=images
.
Таким образом, если я перехожу к папке js
, которая используется для хранения файлов javascript, возникает вышеуказанная проблема. Таким образом, проблема возникает, если имя какого-либо подкаталога передается как имя_папки.
Как это решить?
Если указан http://mysite/images/
, mod_rewrite перенаправляет на http://mysite/images/index.php?page=images
вместо http://mysite/index.php?page=images
Редактировать
Подскажите пожалуйста, как заблокировать хотлинкинг файлов и каталогов и перенаправить обратно на страницу индекса или отправить какую-нибудь ошибку заголовка браузера?
Я пробовал это:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*) http://%{HTTP_HOST} [R,L]
RewriteRule ^article/([a-z]+)/?$ /index.php?page=article&name=$1 [L]
RewriteRule ^([a-z]+)/?$ /index.php?page=$1 [L]
Редактировать
Новый код (полуработающий):
RewriteEngine on
RewriteBase /
# remove trailing slash ONLY if it is not an existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1/ [R,L]
RewriteRule ^article/([a-z]+)/?$ http://%{HTTP_HOST}/index.php?page=article&name=$1 [L]
RewriteRule ^([a-z]+)/?$ http://%{HTTP_HOST}/index.php?page=$1 [L]
Этот код устранит проблему с отсутствием отображения фото и css при упоминании имени каталога. Но независимо от того, какое имя я укажу, например: http://mysite/contactus
, оно перейдет на URL: http://mysite/index.php?page=contactus
. Даже если я использую имя каталога, например: http://mysite/js
, оно перейдет к: http://mysite/index.php?page=js
Я очень смущен.