我听说您可以用来mod_rewrite
清理您的 URL,基本上我想让.php
文件扩展名不显示在 URL 中。
例如,假设我的网站上有以下文件结构:
/index.php
/about.php
/contact.php
/css/main.css
/img/animage.jpg
/admin/index.php
/admin/login.php
/admin/admin.php
我想用 mod_rewrite 做出以下基本更改:
- 当对根目录即发出请求时
/about
,如果发现名为的目录about
,则其行为应与目录正常行为一样(即从目录加载 index.php)。 - 如果找不到目录,它应该指向
about.php
.php
如果发出了文件请求,它应该 301 重定向到不带.php
扩展名的文件名。- 只有实际上可以在浏览器中直接查看的目录才应更改这些 URL(即根目录和管理员目录),因此 css 和 img 的 URL 应该保持不变。
我如何使用进行这些更改mod_rewrite
?
答案1
在 .htaccess 文件中:
RewriteEngine On
RewriteBase /
# Abort on directories, skip sub-requests
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .? - [L,NS]
# Check if there is php file (add extension)
RewriteCond %{REQUEST_URI}\.php -f
RewriteRule (^.*) $1\.php [L]
#Redirect explicit php requests (if file exist)
RewriteCond %{REQUEST_FILENAME} -f
# strange - REQUEST_URI always contains .php
# have to parse whole request line
# look for .php in URI (fields are space separated) but before '?' (query string)
RewriteCond %{THE_REQUEST} ^[^\ ]+\ /[^\ \?]*\.php
RewriteRule (.*)\.php$ $1 [NS,R=301]
mod_rewrite 非常强大:)