.htaccess重写不工作

时间:2013-03-07 13:34:08

标签: php mod-rewrite rewrite

这已被问到在互联网上和这里的stackoverflow。 但是我无法让它发挥作用。 (第一次使用.htacces) 我想做的是一些简单的事情:

  1. 从网址中删除www
  2. 从网址中删除.php
  3. 如果链接回主页,则
  4. 从主页中删除/index
  5. 根据我的网站托管公司,这是他们使用的:
    Apache 2.2+和PHP 5.3+ - MySQL 5.1+

    .htacces文件位于index.php的根文件夹中 我已经尝试了很多东西,但这就是我现在所得到的:

    RewriteEngine On
    #www to non www
    RewriteCond %{HTTP_HOST} !^mysite.se$ [NC]
    RewriteRule ^(.*)$ http://mysite.se/$1 [L,R=301]
    
    #remove .php
    RewriteCond %{HTTP_HOST} ^mysite\.se$ [NC]
    RewriteCond %{QUERY_STRING} !internal=1 [NC]
    RewriteRule ^(.*)\.php$ $1 [L,R=301]
    
    #remove /index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?/$1 [L]
    

    事先感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

你以错误的方式使用.htaccess

你不能使用htaccess来生成一个友好的网址,你必须使用它来将友好的网址翻译成真实的网址

RewriteEngine On
RewriteBase /

#redirect www.mysite.se to mysite.se
RewriteCond %{HTTP_HOST} !^mysite.se$ [NC]
RewriteRule ^(.*)$ http://mysite.se/$1 [L,R=301]

#redirect mysite.se/page to mysite.se/page.php (transparent)
#as this rule is extremely permissive, we desactivate it when we're calling
#a real file, to avoid this kind of situation : mysite.se/img/mylogo.jpg.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]

#redirect mysite.se/index to mysite.se/ (visible)
RewriteRule ^index$ / [L,R=301]

在您的代码中,使用友好网址,然后让htaccess重定向它。

如果您不使用这种方式,您将陷入自我毁灭模式,尝试将page.php重定向到page(以获取不错的网址),并重定向{{1} } page(因为您的应用只知道page.php)。