Я потратил последние 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