这已被问到在互联网上和这里的stackoverflow。 但是我无法让它发挥作用。 (第一次使用.htacces) 我想做的是一些简单的事情:
www
。 .php
。 /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]
事先感谢您提供的任何帮助。
答案 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
)。