2010-12-10 64 views
5

我用我的htaccess文件的mod_rewrite与创造清洁的网址是这样的:.htaccess中加入斜线,并迫使WWW用干净的网址

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 
</IfModule> 

我也想迫使该网站有“WWW”子域,并且最重要的是,如果网址没有一个,请添加尾部斜线。

我是一个mod_rewrite绝对noob和我已经尝试通过结合我在谷歌上找到的其他代码(伤心,我知道)完成这个,但我总是以500错误结束。

这里是我发现力WWW代码:

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^www\.domain\.tld$ [NC] 
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L] 
</IfModule> 

感谢您的帮助。

+0

做其中任何单独工作?找出哪些规则正在破坏它。 – profitphp 2010-12-10 16:25:37

+0

我知道第一个作品,我认为第二个作品也是。我只是不知道如何将它结合起来以获得我想要的结果。 – imns 2010-12-10 16:50:24

回答

11

尝试分离出www和尾部斜线检查。这已经过测试,希望能为你工作。你没有说如果你正在运行放置在域根目录或子目录中 - 通常是在寻求htaccess帮助时的好信息。

RewriteEngine On 

# Assuming you're running at domain root. Change to working directory if needed. 
RewriteBase/

# 
# www check 
# If you're running in a subdirectory, then you'll need to add that in 
# to the redirected url (http://www.mydomain.com/subdirectory/$1 

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

# 
# Trailing slash check 

# Don't fix direct file links 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

# 
# Finally, forward everything to your front-controller 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php [QSA,L] 

要进行调试,注释掉各个部分并查看哪些部分不工作。

+1

这个回答正确吗?我试图完成同样的自己(*除了前缀“www”*)我无法得到这个答案的工作。 – Dan 2011-05-16 18:29:24

+0

同样,我无法获得此代码的工作 – DaveO 2011-06-06 22:12:05

+0

经过测试,它对我来说仍然正常工作。什么部分完全不起作用?尾部的斜线,转发到index.php或www? – Leniency 2011-06-07 14:11:00

1

使用此和忘记您的问题;)

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] 
RewriteRule ^(.*?)/*$ http://%1/$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://your-domain.ru/$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule>