从URL中删除www并使用类似目录的URL' s

时间:2014-05-12 12:17:11

标签: apache .htaccess mod-rewrite

我在从网址中删除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}}

所以我的问题很明显:我做错了什么,我怎么能让它发挥作用?

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]