【问题标题】:Using .htaccess to rewrite a simple url使用 .htaccess 重写一个简单的 url
【发布时间】:2012-03-26 21:40:39
【问题描述】:
我有一个这样的网址 - www.example.com/blog.php/username,它会将您带到用户名的博客页面,但我想使用这样的网址 - www.example.com/blog /username 访问相同的文件 (blog.php)。请问我需要采取哪些步骤来实现这一目标?感谢您的帮助。
【问题讨论】:
标签:
php
.htaccess
mod-rewrite
【解决方案1】:
在您的根目录中创建一个名为 .htaccess 的文件,并将其传递到:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^blog/(.*)$ yourpage.php?username=$1 [L]
</IfModule>
(.*) 将采用任何字符
如果您只想使用字母和数字,请将 (.*) 更改为 ([A-Za-z0-9])
【解决方案2】:
启用 mod_rewrite 和 .htacess。然后将此代码添加到 DOCUMENT_ROOT 下的 .htaccess 中:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# If the request is not for a valid link
RewriteCond %{REQUEST_FILENAME} !-l
# finally this is your rewrite rule
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC]
【解决方案3】:
删除文件扩展名:
有两种方法可以做到这一点。只看一个简单的方法
请求,如果请求的文件名不存在,则查找
带有 .php(或 .asp 或其他)扩展名的文件名。在一个
.htaccess 文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]
现在,如果您转到:http://domain/about,服务器会将其解释为
如果你去http://domain/about.php.
有道理,但如果我们已经破坏了 URL 之间的关系
和文件名,我们不妨聪明地破解它。改变那个
.htaccess 文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
来源:Dave Dash -> http://davedash.com/2006/07/26/how-to-remove-file-extensions-from-urls/
【解决方案4】:
1 你应该安装 mod-rewrite
2 你应该确保你的文档根目录是“AllowOverride All”。普通虚拟主机配置后你应该会发现类似:
<Directory "/your/doc/root/path/">
AllowOverride All
</Directory>
3 之后,您应该按照 David Bélanger 的建议启动重写引擎并在 .htaccess 中创建重写规则:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^blog/(.*)$ blog.php/$1 [L]
</IfModule>