重写htaccess以获取干净的URL和自定义404页面

时间:2013-11-08 01:33:04

标签: .htaccess mod-rewrite

我正在尝试用.htaccess

做四件事

首先是从所有文件中删除php扩展

所以

www.mywebsite.com/home is written www.mywebsite.com/home.php

我想更改为错误页面,因此如果向www.mywebsite.com/adakadabra发出请求,并且有像adakabra.php这样的页面,则会自定义使用自定义404.php。

第三,我想要徒劳的网址,以便用户可以拥有像

这样的个人资料链接
www.mywebsite.com/Joe 

我有一个profile.php,我使用get请求获取用户名,因此重写将来自       www.mywebsite.com/joe至www.mywebsite.com/profile.php?username=joe

最后但并非最不重要

我想要一个像www.mywebsite.com/p/123453

这样的网页

重写为       www.mywebsite.com/p.php?photo=123453

我的网络服务器上有p.php页面。

1 个答案:

答案 0 :(得分:0)

这可以使用/.htaccess中的3组规则:

ErrorDocument 404 /404.php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p/([0-9]+)$ /p.php?photo=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(Joe|Mao|Napoleon|Gandi)$ /profile.php?username=$1 [QSA,L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ /$1.php [QSA,L]

这是如何运作的:

  1. www.mywebsite.com/p/123453 => /p.php?photo=123453
  2. www.mywebsite.com/Joe => /profile.php?username=Joe
  3. www.mywebsite.com/home => /home.php, www.mywebsite.com/houra/foo/bar/home => /houra/foo/bar/home.php