如何设置基本的 mod_rewrite?

如何设置基本的 mod_rewrite?

我听说您可以用来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 非常强大:)

相关内容