2012-09-18 40 views
0

我需要更新.htaccess文件,请快速回顾:可以.htaccess完整性检查?

RewriteEngine On 
# Redirects errors to 404 page 
ErrorDocument 404 /404.php 

# Redirect index.php to site root 
RewriteCond %{HTTP_HOST} ^mysite.com [NC] 
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,NC] 
RewriteRule ^index.php$ http://www.mysite.com/ [R=301,L] 

# Unless directory remove slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ http://www.mysite.com/$1 [R=301,L] 

# Remove .php 
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(.+)\.php$ http://www.mysite.com/$1 [R=301,L] 

# Resolve .php file for extensionless php urls 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^([^/.]+)$ $1.php [L] 

这是相当直截了当。

第一个是404重定向。
第二个将www.mysite.com/index.php重定向到www.mysite.com
第三个删除斜杠。 第四个删除.php扩展名。 第五个解决php。

有人可能会注意到这一点,请给我的代码快速完整性检查。

+0

谁投票关闭offtopic? – diEcho

+0

我不知道这是什么意思?我是新来的:/ – D0nkey

+0

如果您发现它有用,请接受答案!投票结束的主题是因为它可能不是堆栈溢出所接受的问题的风格(你不解决直接的问题) –

回答

1

当您重定向用户时,以下可能会更有意义,他们将再次遍历所有.htaccess文件。

你在这里实际做的是如果其中任何一个是true你告诉浏览器去从不同的URL“[R=301]”再次加载网站。

# Redirect index.php to site root 
RewriteCond %{HTTP_HOST} ^mysite.com [NC] 
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301] 
RewriteRule ^index.php$ http://www.mysite.com/ [R=301,L] 

您的其他重定向是在一个合理的顺序,如果不是目录下降斜线,如果一个PHP下降.php为再没有斜线解决任何问题。

注意这将导致相当多的重定向。如果用户访问您的网站在特定的URL,例如mysite.com/cake.php/(不存在)

mysite.com/cake.php/ =>mysite.com/cake.php
mysite.com/cake.php =>mysite.com/cake
mysite.com/cake =>http://www.mysite.com/cake
http://www.mysite.com/cake解析为http://www.mysite.com/cake.php - 不存在
404 =>http://www.mysite.com/404.php
http://www.mysite.com/404.php =>http://www.mysite.com/404

虽然总之它做你在找什么!

+0

谢谢,我已经重新定位它。代码的其余部分是否正常?我已经经历了无数页面,并认为它会做我想做的事情,我只希望有比我更多经验的人快速浏览一下。谢谢:) – D0nkey

+0

对我来说看起来不错(增加了一些信息来回答) –

+0

@Pez Cuckow为什么我们在'RewriteCond'和'ReWriteRule'中使用'[NC]'标志? – diEcho