PHP .htaccess -gt; pretty url (in reverse)(PHP .htaccess -漂亮的网址(反向))
问题描述
我知道如何重写 URL,例如:www.example.com/index.php?id=1&cat=3
到 www.example.com/1/3/
(或其他).我知道.
I know how to make URL's rewrite, for example:
www.example.com/index.php?id=1&cat=3
to www.example.com/1/3/
(or whatever). I know that.
我不知道到底如何将所有页面中的整个链接更改为链接到漂亮的 URL.我网站的所有链接都是老式的(<a href="index.php?id=1&cat=2">
),而且有很多.
What I don't know is how on earth to change my whole links in all pages to link to pretty URL's. All my site's links are old fashion (<a href="index.php?id=1&cat=2">
) and there are many.
我问如果用户点击 index.php?id=1,是否有人有想法或知道如何自动重定向到那个漂亮的 url.(如果您更改网址中的标题,则几乎就像这个站点 Stackoverflow).
I`m asking if someone has an idea or know how to automaticaly redirect to that pretty url if the user click on index.php?id=1. (Almost like this site Stackoverflow if you change title in the url).
所以我的假设是...
用.htaccess读取index.php?id=1&cat=2重写index/1/3,自己又解释了(奇怪)
Use .htaccess to read the index.php?id=1&cat=2 to rewrite index/1/3 that itself interprets again (strange)
一个用于执行 htaccess 重写回原始重定向的 php 文件...
a php file to do the redirects that htaccess rewrites back to original...
结论:将<a href="index.php?id=1&....">
自动更改为index/1/2
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
##################################
# This turns index.php?id=1&cat=2 into index/1/2 and then back 'transparent' into index.php?id=1&cat=2 if you have old fashioned
# links in your site and don't want to change them :)
# Avoid mod_rewrite infinite loops
# This is critical if you want to use this code
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
# Hard-rewrite ("[R]") to "friendly" URL.
# Needs RewriteCond to match original querystring.
# Uses "?" in target to remove original querystring,
# and "%n" backrefs to move its components.
# Target must be a full path as it's a hard-rewrite.
RewriteCond %{QUERY_STRING} ^id=(d+)&cat=(d+)$
RewriteRule ^index.php$ http://localhost/index/%1/%2/? [L,R]
# Soft-rewrite from "friendly" URL to "real" URL.
# Transparent to browser.
# Won't re-trigger the above rewrite, though I'm
# not really sure why! The order of the rules
# doesn't seem to make a difference.
RewriteRule ^index/(d+)/(d+)/$ index.php?id=$1&cat=$2 [L]
推荐答案
RewriteEngine on
# Prevents browser looping, which does seem
# to occur in some specific scenarios. Can't
# explain the mechanics of this problem in
# detail, but there we go.
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
# Hard-rewrite ("[R]") to "friendly" URL.
# Needs RewriteCond to match original querystring.
# Uses "?" in target to remove original querystring,
# and "%n" backrefs to move its components.
# Target must be a full path as it's a hard-rewrite.
RewriteCond %{QUERY_STRING} ^id=(d+)&cat=(d+)$
RewriteRule ^index.php$ http://example.com/index/%1/%2/? [L,R]
# Soft-rewrite from "friendly" URL to "real" URL.
# Transparent to browser.
RewriteRule ^index/(d+)/(d+)/$ /index.php?id=$1&cat=$2
当然,理想情况下,您只需修复链接,然后只需要软重写即可.:)
Of course, ideally, you'd just fix your links, and then you'd only require the soft-rewrite. :)
使用 Apache/2.2.3 测试.我想我编造了硬重写"和软重写"这两个术语.
这篇关于PHP .htaccess ->漂亮的网址(反向)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:PHP .htaccess ->漂亮的网址(反向)
基础教程推荐
- 使用 PDO 转义列名 2021-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- PHP 守护进程/worker 环境 2022-01-01
- HTTP 与 FTP 上传 2021-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01