希望这不是一个重复的,做了很多的寻找,我只是得到更多的困惑,因为我不经常使用.htaccess
。
我想有一些漂亮的网址,并看到很多关于获取信息的帮助,例如index.php
被传递了一个参数,如page
。所以我现在可以转换www.example.com/index.php?page=help
到www.example.com/help
。
显然,我不知道这一点,但我想解析一个URL,如www.example.com/?page=help
。
似乎找不到太多的信息和适应原来的我显然是走错了地方。
任何帮助或正确方向的指针将不胜感激。我敢肯定,这可能是愚蠢的简单。
到目前为止,我的修改似乎没有工作是:
RewriteCond %{THE_REQUEST} ^.*/?page=$1
RewriteRule ^(.*)/+page$ /$1[QSA,L]
最近也尝试了QUERY_STRING
,但只是得到服务器错误。
RewriteCond %{QUERY_STRING} ^page=([a-zA-Z]*)
RewriteRule ^(.*) /$1 [QSA,L]
放弃了对世界的死亡,所以我想我会问。希望确保请求/url等启动?page
,并希望从page
参数中创建一个干净的URL。
2条答案
按热度按时间8wtpewkr1#
这是整个/基本过程......
1. HTML源代码
确保链接到HTML源中的“pretty/canonical”URL。这应该是以斜杠开头的相对于根目录的URL(或绝对URL),以防以后从不同的URL路径深度重写。例如:
2.重写“漂亮”URL
在
.htaccess
中(使用mod_rewrite),在内部将“pretty”URL重写回实际处理请求的文件,即“front-controller”(例如index.php
,如果需要,可以传递page
URL参数)。RewriteRule
pattern^[^.]+$
匹配任何不包含点的URL路径。通过排除点,我们可以轻松地忽略任何Map到物理文件(包括由点分隔的文件扩展名)的请求。$0
反向引用包含与RewriteRule
* 模式 * 匹配的完整URL路径。DirectoryIndex
在请求“主页”(根目录)时是必需的,而URL路径在其他情况下为 * 空 *。在这种情况下,page
URL参数不会传递给我们的脚本。3.实施前端控制器/路由器(即
index.php
)在
index.php
(您的“前端控制器”/路由器)中,我们读取page
URL参数并提供适当的内容。如上面的脚本所示,实际的“内容”存储在
/content
子目录中(也可以是文档根目录之外的位置)。通过将这些文件存储在单独的目录中,可以很容易地防止直接访问它们。4.将“旧/丑”URL重定向到“新/漂亮”URL [可选]
只有当您正在 * 更改 * 一个现有的URL结构并且“旧/丑”(原始)URL已经暴露(被搜索引擎索引,被第三方链接等)时,这才是绝对必要的(为了保护SEO),否则“旧”URL(即
/index.php?page=abc
)是可访问的。如果网站是新的,并且您从一开始就实现了“新/漂亮”的URL,那么这就不那么重要了,但它确实可以防止用户访问旧的URL,如果他们曾经暴露/猜测。
以下代码将在内部重写之前和
RewriteEngine
指令之后执行。对
REDIRECT_STATUS
环境变量的检查通过不重定向已被稍后的重写所重写的请求来防止重定向循环。%1
反向引用包含page
URL参数的值,该参数是从前面的 CondPattern(RewriteCond
指令)中捕获的(注意这与上面重写中使用的$n
反向引用有何不同)。上面的命令重定向所有URL变量,包括使用/不使用
index.php
以及使用/不使用page
URL参数。例如:/index.php?page=help
-〉/help
/index.php
-〉/
(主页)/?page=
-〉/
(主页)提示:首先测试302(临时)重定向,以防止潜在的缓存问题。
读者评论/改进/练习
QSA
(查询字符串附加)标志,以便在初始请求的URL上附加附加的URL参数。但是,实现反向重定向并不是那么简单。page
URL参数。(原始)URL在PHP超级全局$_SERVER['REQUEST_URI']
中可用(还包括查询字符串-如果有)。然后,您可以解析此变量以提取URL的所需部分,而不是依赖于page
URL参数。这通常具有最大的灵活性,而不必稍后修改.htaccess
。但是,如果您希望使用
.htaccess
手动重写(覆盖)URL路由,则能够传递page
URL参数可能会非常“有用”。/<page>/<param1>/<param2>
和/photo/cat/large
。参考:
cx6n0qe32#
不能删除,不想浪费任何人的时间作出回应。