我花了最后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失败了,网站根本没有加载,并且由于一些奇怪的原因,网址变为www.domain.tld / products / foo-bar(是的,它实际上打印出domain.tld,我没有使用它作为一个例如,该域名当然不是有效的域名。)
以下是我目前在我的htaccess中的内容,请记住,为了强制执行www,我不能!硬编码实际域名,因为将有多个域指向此文档根目录,所有域名都使用相同的脚本构建。
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]
感谢任何帮助,
杰森
答案 0 :(得分:0)
URI路由:请记住,当/ products /(:any)中的(:any)包含斜杠时,路由不再是/ products /(any)..它是/ products /(any)/ (something_else)。这将作为您网址的另一个细分处理。
如果斜杠不是路由的一部分,您将无法在URL中使用带斜杠的内容。如果您只需要在URL中传递,您可以进行某种编码/解码。
至于为什么它路由到domain.tld,我不知道。 :)