我在从网址中删除www
时遇到问题。另外,我想使用类似目录的网址(例如,当我在网址栏中输入www.foo.com/bar/baz
时,它会在背景中转换为foo.com/index?page=bar&action=baz
,并且仅在后台中转换为www
。但我得到的是,当我使用foo.com/index?page=bar&action=baz
键入URL并按Enter键时,我在URL栏中返回foo.com/bar/baz
。我只希望www
出现。 (如果我已经在没有RewriteCond %{HTTP_HOST} ^www\.foo\.com$ [NC]
RewriteRule (.*) http://foo.com$1 [L,R=301]
RewriteCond %{REQUEST_URI} !/index\.php
RewriteCond %{REQUEST_URI} !/Views/.*\.js
RewriteCond %{REQUEST_URI} !/Views/.*\.css
RewriteRule ^([^/]+)/([^/]+)(/[^/]+)* /index.php?page=$1&action=$2 [L,QSA]
RewriteCond %{REQUEST_URI} !/index\.php
RewriteCond %{REQUEST_URI} !/Views/.*\.js
RewriteCond %{REQUEST_URI} !/Views/.*\.css
RewriteRule ^([^/]+) /index.php?page=$1 [L,QSA]
的情况下编写了网址,那么它的工作正常。)
这是我的代码(仅更改了原始网址):
{{1}}
所以我的问题很明显:我做错了什么,我怎么能让它发挥作用?
答案 0 :(得分:0)
可能还有其他一些Apache规则正在发挥作用,但从外观上看,可能存在斜杠问题。如果你的第一条规则是这样的话会更好 -
RewriteRule (.*) http://foo$1 [L,R=301]
没有尾部斜线。这样做的原因是,当重定向www.foo.com/foo/bar时,您将创建一个双//。它将重定向到foo.com//foo/bar。
您的其他规则应以/开头,例如 -
RewriteRule ^/([^/]+)/([^/]+)(/[^/]+)* /index.php?page=$1&action=$2 [L,QSA]
和 -
RewriteRule ^/([^/]+) /index.php?page=$1 [L,QSA]