使用.htaccess删除文件扩展名和URL变量

时间:2014-03-19 10:17:01

标签: php .htaccess mod-rewrite

我正在编写一个小博客,我找到了一个有用的.htaccess文件来删除文件扩展名:

AddType text/x-component .htc
RewriteEngine On
RewriteBase /

# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)/index$ $1/ [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php 

这很好用,所有页面都显示.php更少。我知道想扩展这个,所以当我点击指向特定博客帖子的链接(比如/blog/index.php?art=1)时,它只会在网址/ blog / 1中显示在网址中。我想要标记到.htaccess文件的末尾:

RewriteRule ^blog/(.*)$ blog/index.php?art=$0 [L]

但这似乎不起作用。编辑实际上它打破了博客页面,因此没有从数据库中提取片段

我的.htaccess文件位于根目录中,博客文件是/root/blog/index.php

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

与大多数其他语言不同,.htaccess中的参数 0。要访问第一个参数,您应该使用$1,而不是$0

以下内容应该有效:

RewriteRule ^blog/(.*)$ blog/index.php?art=$1 [L]

在那里添加一些测试可能也是值得的,例如,您可能只希望将数值传递给art,因此您可以使用以下方法对其进行改进:

RewriteRule ^blog/([0-9]+)$ blog/index.php?art=$1 [L]

此外,添加QSA标志可能是值得的,因为这也将保留在原始URL中传递的任何查询字符串:

RewriteRule ^blog/([0-9]+)$ blog/index.php?art=$1 [L,QSA]