如何用“_”替换“ - ”并从地址栏中删除index.php

时间:2012-08-04 08:29:58

标签: .htaccess

我在codeigniter中开发了我的网站。我在.htaccess文件中有几件事要做。

  • 对于index.phpimgjscss以外的任何页面/资源,我希望它在实际资源之前添加index.php在网址中。

  • 我有很多静态页面,其中包含unserscore“_”,例如contact_us.phpour_services.php等。我希望当用户提供类似www.mywebsite.com/our-services的网址时,它应该是打开原始页面,即www.mywebsite.com/our_services。不同页面有1,2个最多7个下划线,例如mywebsite.com/speech_writing_services

这是我目前可以构建的.htaccess文件:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !^(/index\.php|/img|/js|/StyleAdmin|/images|/StyleAdmin/images|/css|/robots\.txt|/favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteRule ^([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2 [R=301,L]
RewriteRule ^([^-]*)-([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2_$3 [R=301,L]
RewriteRule ^([^-]*)-([^-]*)-([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2_$3_$4 [R=301,L]
RewriteRule ^([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2_$3_$4_$5 [R=301,L]
RewriteRule ^([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2_$3_$4_$5_$6 [R=301,L]

这里的问题是,当我给出像www.mywebsite.com/contact_us这样的网址时,它工作正常,并在地址栏中显示相同的网址。但是,当我提供此网址www.mywebsite.com/contact-us时,它确实显示了该网页,但浏览器地址栏中显示的网址变为www.mywebsite.com/index.php/contact_us,而我希望它与www.mywebsite.com/contact_us index.php一样删除。

1 个答案:

答案 0 :(得分:0)

您需要在重定向后进行路由。

RewriteEngine on

RewriteRule ^([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2 [R=301,L]
RewriteRule ^([^-]*)-([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2_$3 [R=301,L]
RewriteRule ^([^-]*)-([^-]*)-([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2_$3_$4 [R=301,L]
RewriteRule ^([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2_$3_$4_$5 [R=301,L]
RewriteRule ^([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)$ http://www.mywebsite.com/$1_$2_$3_$4_$5_$6 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(/index\.php|/img|/js|/StyleAdmin|/images|/StyleAdmin/images|/css|/robots\.txt|/favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]