как добавить имя поддомена из текущего URL-адреса, используя правила .htacces

У меня есть URL-ссылка типа http://domain.com/abd/def/city и ,

я хочу отобразить его как http://city.domain.com/abc/def

используя .htaccess.

Может ли кто-нибудь помочь мне, предоставив правила доступа .ht.

Я хочу написать правила .htaccess для каждого имени города в URL-адресе в качестве имени поддомена. Также я хочу, чтобы он был динамичным, так как на сайте доступны разные города.

я использую приведенный ниже код в файле .htaccess, но не работаю должным образом.

RewriteRule ^index.php/(.)/(.)/([^/]+)$ http://$3.domain/$1/$2/$3 [R=301,L]

есть ли способ получить мое требование, используя или изменив мой код выше или какой-либо другой код .htaccess.


url
person user3068800    schedule 28.02.2014    source источник


Ответы (1)


Извините, но то, что вы просите, невозможно. Это типичное неправильное понимание перезаписи URL:

Перезапись URL переписывает (манипулирует) входящие запросы на стороне сервера перед их обработкой. невозможно изменить исходящий контент таким образом, чтобы содержащиеся в нем URL-адреса изменились.

Однако для этого есть решения:

  • Прокси-модуль apache может «сопоставить» один URL-адрес с областью действия другого URL-адреса.
  • также есть модули для автоматической постобработки сгенерированной html разметки
  • существуют более экзотические или креативные решения, в конце концов, это зависит от вашей ситуации...

Но обычно проще всего изменить приложение (обычно только его центральную конфигурацию) таким образом, чтобы оно содержало конечные URL-адреса (указывающие на поддомен в вашем случае). Затем вы действительно можете использовать модуль перезаписи, чтобы «переназначить» их в предыдущую область, когда будущие входящие запросы будут ссылаться на них (они были нажаты).


Хорошо, второй шаг — получение дополнительной информации из ваших комментариев:

Просто для ясности: вы понимаете, что невозможно изменить ссылку, которую вы отправляете, путем перезаписи, но вы хотите изменить URL-адрес, отображаемый в браузере после, когда пользователь нажал на какой-либо ссылка на город? Это отличается от того, что вы писали ранее, и это действительно возможно. Большой.

Если переписывание работает так, как вы хотите (вы видите нужный URL-адрес в адресной строке браузера), то мы можем продолжать. Сообщение об ошибке указывает на проблему с разрешением имени, которая не имеет ничего общего с перезаписью. Скорее всего домен "cambridge.192.168.2.107" не резолвится, что собственно и не удивительно. Вы не можете смешивать IP-адреса и имена, это или или.

Также я вижу, что вы используете внутренние немаршрутизируемые адреса. Таким образом, вы также сами несете ответственность за разрешение имен, поскольку ни один общедоступный DNS-сервер не может догадаться, что вы настраиваете внутри. Ты сделал это?

Я предлагаю следующие шаги:

  1. прекратите использовать для этого IP-адреса, используйте доменное имя.
  2. поскольку вы работаете внутри компании, позаботьтесь о том, чтобы это доменное имя действительно разрешалось в IP-адрес вашей локальной системы. Как вы это сделаете, очевидно, зависит от вашей настройки и системы. Скорее всего вам нужна какая-то запись в файле /etc/hosts или подобная.
  3. вам нужно позаботиться о том, чтобы и эти «имена субдоменов» разрешались на один и тот же адрес. Это не тривиально, опять же, это зависит от настроек и системы, которую вы используете локально.
  4. если это разрешение имени работает, вы должны увидеть запрос в файле журнала доступа к http-серверам. Тогда и только тогда есть смысл продолжать...
person arkascha    schedule 28.02.2014
comment
есть ли какой-либо код .htaccess, который может помочь в достижении моей цели. Например, я использую приведенный ниже код .htaccess, но не работает должным образом, поскольку он перенаправляет, поскольку страница не найдена! RewriteRule ^index.php/(.)/(.)/([^/]+)$ http://$3.domain/$1/$2/$3 [R=301,L] - person user3068800; 28.02.2014
comment
Извините, я не могу ответить на этот вопрос, так как у меня нет подробностей о ситуации. Какой URL запрашивается и на что он перезаписывается? ты это знаешь, а не я. Подсказка: как ВСЕГДА при попытке настроить или отладить правила перезаписи: ВКЛЮЧИТЕ РЕГИСТРАЦИЯ ПЕРЕЗАПИСИ! Посмотрите отличную документацию модуля перезаписи, там вы найдете команды RewriteLog и RewriteLogLevel. Они помогают вам понять точно, что на самом деле происходит внутри механизма перезаписи для каждого запроса. Не пытайтесь угадать, что происходит, включите свет (регистрация) и внимательно посмотрите! - person arkascha; 28.02.2014
comment
Хорошо, видите, у меня есть сайт со списком продуктов по названию города. Так что есть список городов и каждое название города, имеющее ссылку типа domain/ штат/город. на этой странице есть список товаров, имеющих этот город. но я хочу переписать свой URL как: city.domain/state. я использую эту ссылку в качестве ссылки: stackoverflow.com/questions/11558384/ поэтому вместо URL domain/state/city , я хочу быть city.domain/state - person user3068800; 28.02.2014
comment
Я это понял. Но как написано: это невозможно путем перезаписи. Модуль перезаписи просто не может изменить ссылки, которые вы отправляете. Если вы отправляете html-разметку, содержащую domain.com/state/city, то эти ссылки выходят вот так. Модуль перезаписи не может быть использован для их изменения. Он может изменять только входящие запросы. - person arkascha; 28.02.2014
comment
я использую приведенный ниже код ссылки, который соответствует моему требованию, но не работает должным образом. stackoverflow.com/ questions/11558384/ не могли бы вы помочь мне выяснить, есть ли ошибка при использовании этого кода на моем сайте. - person user3068800; 28.02.2014
comment
Извините, похоже, вы действительно не читаете или не понимаете, что я отвечаю. Я спросил несколько вещей, вы не реагируете на это. Вы повторяете то, что написали раньше, не добавляя деталей. Извиняюсь. - person arkascha; 28.02.2014
comment
хорошо, вот моя ссылка, содержащая список городов: 192.168.2.107/state/EE и нажав любое название города, которое я хочу отображать в URL-адресе, например: cambridge.192.168.2.107/b/city/552 /Cambridge вместо URL 192.168.2.107/b/city/552/Cambridge я использую приведенный ниже код, который динамически меняет URL-адрес, но выдает ошибку, поскольку сервер не найден. ‹ifModule mod_rewrite.c› RewriteEngine на RewriteRule ^index.php/(.*)/(.*)/(.*)/([^/]+)$ http://$4.192.168.2.107/$1/$2 /$3/$4 [R=301,L] ‹/IfModule› - person user3068800; 28.02.2014
comment
Я добавил второй шаг к ответу выше с некоторыми предложениями. Если у вас есть дополнительные вопросы, было бы целесообразно продолжить этот обмен в месте, более подходящем для интерактивных дискуссий. Поскольку у вас недостаточно очков репутации (пока!) для использования внутреннего чата: есть ли у вас доступ к IRC-чату? Тогда свяжитесь со мной на freenode irc, под тем же ником, что и здесь. Обычно меня можно найти в каналах #kde или #owncloud. - person arkascha; 28.02.2014