htaccess и проблема маршрутизации в Code Igniter - PullRequest
0 голосов
/ 24 февраля 2011

Я потратил последние 3 часа, пытаясь понять это правильно, но всегда есть одна часть, которая не работает, поэтому я был бы очень благодарен, если бы кто-то мог помочь мне.

Что я пытаюсь достичь в htaccess: Для удаления косых черт и принудительного применения www.

Итак, эти 4 примера должны показывать один и тот же результат:

#1. www.mysite.com/products/show/
#2. www.mysite.com/products/show
#3. mysite.com/products/show/
#4. mysite.com/products/show

Все они должны показать # 2, так как это правильно.

Существует множество примеров и решений для этого, и я заставляю его работать, НО! Я также использую маршрут на этом контроллере, выглядящий так: $ route ['products / (: any)'] = "products / show / $ 1";

Еще раз, все это работает, как htaccess, так и маршрут, проблема возникает, когда (: any) содержит косую черту, например, foo-bar. Затем неожиданно происходит сбой # 3, и сайт просто не загружается вообще, и по какой-то странной причине URL-адрес меняется на www.domain.tld / products / foo-bar (да, на самом деле он печатает domain.tld, я не использую его как пример. и этот домен, конечно, даже не является действительным доменом.)

Ниже приведено то, что у меня есть в моем htaccess, пожалуйста, имейте в виду, что для принудительного применения www я не могу! жестко закодируйте фактическое имя домена, потому что будет несколько доменов, указывающих на этот корень документа, все с использованием одного и того же сценария im building.

Options +FollowSymlinks
RewriteEngine On
RewriteBase /



#RewriteRule ^(welcome(/index)?|index(\.php)?)/?$ / [L,R=301]
RewriteCond $1 !^(index\.php|images|doc)
RewriteRule ^(.*)/index/?$ $1 [L,R=301]

# Removes trailing slashes (prevents SEO duplicate content issues)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]

# Enforce www

RewriteCond %{HTTP_HOST} ^([^.]+)\.([^.]+)$ [NC]
RewriteRule ^(.*)$ http://www.%1.%2/$1 [R=301,L]

Благодарен за любую помощь,

Jason

1 Ответ

0 голосов
/ 24 февраля 2011

WWW Проблема: Возможно, вам нужна запись CNAME, чтобы mysite.com указывал на www.mysite.com?Это мое лучшее предположение с учетом данной информации.

Маршрутизация URI: имейте в виду, что когда (: any) в / products / (: any) содержит косую черту, маршрут больше не / products / (any) .. это / продукты / (любые) / (что-то еще).Это обрабатывается как еще один сегмент вашего URL.

Вы не сможете использовать что-либо в своем URL с косой чертой, если косая черта не является частью вашей маршрутизации.Вы могли бы сделать какое-то кодирование / декодирование, если вам просто нужно передать это в URL.

Относительно того, почему он перенаправляется на domain.tld, я понятия не имею.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...