0

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

  1. www从网址 中删除。
  2. .php从网址 中删除。
  3. /index如果链接回主页,则从主页中删除。

根据我的虚拟主机公司,这是他们使用的:
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]

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

4

1 回答 1

1

你用.htaccess错了方法。

您不能使用 htaccess 生成友好的 url,您必须使用它来将友好的 url 转换为真实的

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]

在您的代码中,使用友好的 urls,并让 htaccess 重定向它。

如果您不使用这种方式,您将进入一种自毁模式,尝试重定向page.phppage(以获得漂亮的 url),然后重定向pagepage.php(因为您的应用程序只知道page.php)。

于 2013-03-07T13:45:24.140 回答