如何更改以下格式的网址
example.com/page/1
要
example.com/index.php?page=1
当我进入
example.com/page/1
它应该重定向到
example.com/index.php?page=1
我的.htaccess文件需要做哪些更改?
文件夹结构如下
-Public_html
.htaccess
index.php
感谢。
答案 0 :(得分:2)
在public_html/.htaccess
文件
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^page/([0-9])/?$ /index.php?page=$1 [QSA,NC,L]
RewriteCond
检查所请求的文件名或目录是否已存在,将跳过RewriteRule
。
答案 1 :(得分:2)
您可以将此代码放入htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^page/([0-9]+)$ index.php?page=$1 [NC,L]
仅使用此代码,您现在可以访问http://example.com/page/55
并查看/index.php?page=55
的内容。
但 ......问题是,您仍然可以访问http://example.com/index.php?page=55
并创建了重复的内容:非常糟糕的引用(Google和其他人)。
有关重复内容的详细信息:here。
解决方案:您可以添加其他规则以将http://example.com/index.php?page=55
重定向到http://example.com/page/55
(没有任何无限循环)
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} \s/index\.php\?page=([0-9]+)\s [NC]
RewriteRule ^ page/%1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^page/([0-9]+)$ index.php?page=$1 [NC,L]
注1:确保(在Apache配置文件中)您已启用 mod_rewrite 并允许 htaccess 文件。
注意2:由于您的规则会创建一个虚拟目录(/page/
),如果您为html使用 relative 路径,则会遇到一些问题资源。确保所有链接(js,css,图像,href等)以前导斜杠(/
)开头,或者在<head>
html标记之后添加基础:<base href="/">
< / p>
答案 2 :(得分:2)
在我的回答中我假设你使用的是linux, 我还假设你会有更多复杂的案例,例如 你想要捕捉的一个参数
example.com/page/1/3 在这种情况下,我认为你将不得不使用你的index.php中的url解析
首先,您必须在站点根目录中设置.htaccess文件,同样您必须确保在apache配置中启用了mod_rewrite
如果您正在运行debian,可以在终端中运行此命令 确保启用此mod:
sudo a2enmod rewrite
将htaccess文件添加到索引php文件所在位置的根目录:
/var/www/html/.htaccess
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
</IfModule>
根据我在index.php中的解决方案,您必须具有可以解析网址请求的函数
/*
$base path is used only if you running your site under folder
example.com/mysitefolde/index.php
*/
function getUrlParams($basePath = ''){
$request = str_replace($basePath, "", $_SERVER['REQUEST_URI']);
return explode('/', $request);
}
index.php请求到example.com/page/1/2
$request = getUrlParams($rootPath);
$module = $request[0]; // page
$moduleValue = $request[1]; // 1
$moduleValue2 = $request[2]; // 2