我正在编写一个小博客,我找到了一个有用的.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
感谢任何帮助
答案 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]