Мой код:Проблема с mod_rewrite когда доступ к каталогу
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/
Но это не будет работать, если я использую имя каталога как PAGE_NAME в URL. Например: http://mysite/images/
. Это приведет к отображению страницы не найденной ошибки (т. Е. Проверяет базу данных и не найдена страница, поэтому отображение «не найдено»). Но на странице не будут отображаться изображения, css (связанный файл). Кроме того, он отображает http://mysite/images/?page=images
в адресной строке.
Как и я, если у меня есть js
папка, которая используется для хранения файлов javascript, проблема выше. Таким образом, проблема возникает, если имя какого-либо подкаталога передается как pagename.
Как это решить?
Когда http://mysite/images/
подается, mod_rewrite перенаправляет к http://mysite/images/index.php?page=images
вместо http://mysite/index.php?page=images
Edit Скажите, пожалуйста, как блокировать хотлинкинга файлов и директории, и перенаправление на главную страницу или отправить ошибку заголовка браузера?
Я попытался это:
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, когда имя каталога упомянуто. Но что бы ни называл pagename, например: http://mysite/contactus
, он будет URL: http://mysite/index.php?page=contactus
. Даже если я использую имя каталога, например: http://mysite/js
, он перейдет к: http://mysite/index.php?page=js
Я очень смущен.
спасибо. Это решит проблему 'http: // mysite/images /? Page = images'. Теперь он будет показывать только «http: // mysite/images /». Но изображения все еще не отображаются. Кроме того, если я поставлю «http: // mysite/images» (без косой черты), он все равно покажет «http: // mysite/images /? Page = images' –
, что с редактированием? – RageZ
Да. Я тоже попробовал «*». Фотографии (внутри html) не отображаются. Но проблема 'http: // mysite/images /? Page = images' исправлена для' http: // mysite/images/'. Не для 'http: // mysite/images' (без косой черты) –