在这里,我们将给大家分享关于php–如何使用mod_rewrite显示SEO友好URL?的知识,同时也会涉及到如何更有效地mod-rewrite–如何在任何操作系统上启用mod_rewrite?、Mo
在这里,我们将给大家分享关于php – 如何使用mod_rewrite显示SEO友好URL?的知识,同时也会涉及到如何更有效地mod-rewrite – 如何在任何操作系统上启用mod_rewrite?、Mod_ReWrite / ReWriteMap使用数据库查找脚本的URL、mod_rewrite – 排除url、php – Apache不使用mod_rewrite.c的内容。
本文目录一览:- php – 如何使用mod_rewrite显示SEO友好URL?
- mod-rewrite – 如何在任何操作系统上启用mod_rewrite?
- Mod_ReWrite / ReWriteMap使用数据库查找脚本的URL
- mod_rewrite – 排除url
- php – Apache不使用mod_rewrite.c
php – 如何使用mod_rewrite显示SEO友好URL?
我不是一个PHP开发人员,我被要求在现有的PHP网站上执行一些SEO.
我注意到的第一件事是丑陋的URL,所以我想让这些重写为更有用的信息.以下是所有可能的模式:
/index.PHP?m=ModuleType&categoryID=id
/index.PHP?m=ModuleType&categoryID=id&productID=id
/index.PHP?page=PageType
/index.PHP?page=PageType&detail=yes
基本上我想做的就是将它们转换成类似的东西:
/ModuleType/Category
/ModuleType/Category/ProductName
/Page
/Page
在任何建议或示例之前我没有使用过mod_rewrite会很棒!
谢谢.
解决方法:
mod_rewrite宁愿用来做相反的事情:将/ ModuleType / Category / ProductName的请求内部重写为/index.PHP?m=ModuleType\u0026amp;categoryID=id\u0026amp;productID=id.在文档中使用新URL是应用程序的工作.
编辑这是一个函数可能如何将参数化URL转换为新的URL的示例:
function url($url, $rules) {
$url = parse_url($url);
parse_str($url['query'], $url['query']);
$argNames = array_keys($url['query']);
foreach ($rules as $rule) {
if ($rule[0] == $url['path'] && array_keys($rule[1]) == $argNames) {
$newUrl = $rule[2];
foreach ($rule[1] as $name => $pattern) {
if (!preg_match('/'.addcslashes($pattern, '/').'/', $url['query'][$name], $match)) {
continue 2;
}
$newUrl = str_replace('<'.$name.'>', $match[0], $newUrl);
}
return $newUrl;
}
}
return $url;
}
$rules = array(
array(
'/index.PHP',
array('m'=>'.*', 'categoryID'=>'.*', 'productID'=>'.*'),
'/<m>/<categoryID>/<productID>'
)
);
echo '<a href="' . url('/index.PHP?m=ModuleType&categoryID=categoryID&productID=productID', $rules) . '">/ModuleType/Category/ProductName</a>';
mod-rewrite – 如何在任何操作系统上启用mod_rewrite?
如果我理解正确,我需要在httpd.config中添加一些内容来启用mod_rewrite.如果是这样,我需要在httpd.conf或apache.conf中放入什么?请具体操作系统.
解决方法:
不,mod_rewrite是一个Apache模块,与PHP无关.
要激活模块,httpd.conf中的以下行需要处于活动状态:
LoadModule rewrite_module modules/mod_rewrite.so
要查看它是否已经处于活动状态,请尝试将.htaccess文件放入包含该行的Web目录中
RewriteEngine on
如果这样做没有抛出500内部服务器错误,并且.htaccess文件被解析,则URL重写有效.
Mod_ReWrite / ReWriteMap使用数据库查找脚本的URL
情景
我已经完全重写了一个旧的现有的ASP经典电子商务网站到PHP。
前一个站点的数据库devise有很多关系型ID问题,导致产品数据行与数据库中其他表格的连接麻烦。
为了解决这个问题,我还重新devise了数据库,为产品提供了新的主键,同时仍然在表中保留了一列与旧产品PK的列。
问题
我的问题是当网站重新启动时,我需要所有的search引擎链接,用来指向“Product.asp?ProductID = 29”来查找数据库,匹配产品旧的PK,并redirect到产品新的PK即“Products.PHP?ID = 53”。
Apaches mod_rewrite VS. PHP路由?
尾随斜杠问题
.htaccess重写:子域为GET var和path为GET var
不可见的mod_rewrite并不总是隐身! (“www”和“无子域”)
启用MultiView的Apache Clean-Urls
我正在寻找与Mod_ReWrite / ReWriteMap,但是,我可以在网上find的所有文档没有说明如何处理数据库脚本PK查找。
更新
我已经在http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritemap >外部重写程序上进一步阅读了Ignacio Vazquez-Abrams的build议,这似乎是正确的,理想的解决scheme。
但是,在联系我的主机后,他们不会在他们的服务器上启用ReWriteMap 。
我已经提供了自己的,但决不是最好的/正确的解决scheme,实现这个没有ReWriteMap启用。
.htaccess重写规则改变下划线破折号
Apache mod_rewrite一个子文件夹的子文件夹(通过内部redirect)
如何从根redirect到子文件夹,重写子文件夹链接看起来像根,然后在htaccess中添加一些例外?
如何从mod_rewrite规则中排除CSS,JS,JPG,GIF文件?
Apache:如何重写没有文件扩展名的URL并忽略大小写?
您的查询:
SELECT ID FROM thetable WHERE ProductID=?
从那里只是回显ID和换行符的值,并刷新标准输出。
重写规则:
RewriteMap dbfixup prg:dbfixup.script RewriteCond %{QUERY_STRING} ProductID=(d+) RewriteRule Product.asp Products.PHP?ID=${dbfixup:%1}
你应该为新的ID有一个不同的变量名称。 这样在你的新程序中,你将知道是否使用旧的ID或新的产品匹配产品。
$old = isset($_GET[''id'']) && is_numeric($_GET[''id'']) && $_GET[''id''] > 0 ? $_GET[''id''] : 0; $new = isset($_GET[''new'']) && is_numeric($_GET[''new'']) && $_GET[''new''] > 0 ? $_GET[''new''] : 0; if ($old + $new > 0) { $query = ''SELECT * FROM `ProductDetails` WHERE ''.($old > 0 ? ''`OrigPrdID`=''.$old : ''`PrdDetID`=''.$new).'' LIMIT 1;''; ...
发现RewriteMap被我的主机禁用后,我已经达成了我自己的解决方案,只需使用mod_rewrite和2x 301重定向。
.htaccess文件
RewriteEngine on RewriteRule ^Product(.*).asp SEO_Redirect.PHP [NC,R=301]
SEO_Redirect.PHP文件
$ID = $_GET[''ID'']; $query_rsNewID = "SELECT NewProductID FROM Products WHERE OldProductID = ''$ID''"; $rsNewID = MysqL_query($query_rsNewID,$Database); $row_rsNewID = MysqL_fetch_assoc($rsNewID); header (''HTTP/1.1 301 Moved Permanently''); header (''Location: Product.PHP?ID=''.$row_rsNewID[''NewProductID'']);
请注意,这是每个文件的简化摘录,并且不会对sql注入安全。
希望谷歌和类似的将接受2×301重定向没有问题。
总结
以上是小编为你收集整理的Mod_ReWrite / ReWriteMap使用数据库查找脚本的URL全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
mod_rewrite – 排除url
我需要一个mod_rewriteredirect所有http请求到https ,但我想排除一些URL
# force https RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^secure. [NC] RewriteCond %{REQUEST_URI} !gateway_callback [NC] RewriteRule ^. https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA]
所有匹配gateway_callback URL必须被排除
这个url不应该被redirect,但它确实!
http://secure.localhost/da/gateway_callback/29/
试图在浏览器中刷新DNScaching,但URL仍然redirect到https
.htaccess重写规则冲突
如果通过htaccess查询string参数不存在,则将HTTPSredirect到HTTP
apache htaccess重写URL友好的SEO
Mod_Rewrite意外的行为L标志
.htaccess导致子文件夹中的问题
如何使用mod_Rewrite来检查一个静态文件的多个文件夹
htaccess 301redirectURL的参数
htaccessurl重写不工作
如何激活mod_rewrite?
.htaccess重写505错误循环
你的配置的主要问题是,REQUEST_URI变量包含正斜杠之后的所有内容。 第三个RewriteCond语句需要更新为如下所示:
RewriteCond %{REQUEST_URI} !^/da/gateway_callback/.*$ [NC]
这应该与您提供的示例相匹配。 如果URI不总是以/da/开头,那么你可能需要放入一个通配符:
RewriteCond %{REQUEST_URI} !^/[^/]+/gateway_callback/.*$ [NC]
其中[^/]+匹配一个或多个不是正斜杠的字符。
我会建议总是尽可能使用正则表达式锚,因为它消除了歧义。 尝试匹配REQUEST_URI的原始RewriteCond不使用它们,这可能会使管理员不经意地一瞥。
另外请注意, 官方文档中 RewriteCond和RewriteRule指令的所有相关示例都使用起始锚点。
尾随的斜线会阻止你匹配吗? 我从来不清楚尾部的斜线是否保留。 我建议改变你的第三个条件
RewriteCond %{REQUEST_URI} !/gateway_callback/d+/?$ [NC]
php – Apache不使用mod_rewrite.c
所以我只是设置了一个带有debian,apache等的linode服务器,现在我正在尝试使用我正在开发的应用程序,但它需要mod_rewrite.c.很自然地,我去了应用程序的目录(如果重要的话,恰好在PHP中)并在其中创建了一个.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.PHP
</IfModule>
所以我们前往我的域,example.com / hello,它给了我一个404错误,它应该向我展示index.PHP加载的内容.是否有任何理由为什么mod_rewrite.c不起作用?
解决方法:
在/ etc / apache2 / mods中启用了模块吗?
今天关于php – 如何使用mod_rewrite显示SEO友好URL?的讲解已经结束,谢谢您的阅读,如果想了解更多关于mod-rewrite – 如何在任何操作系统上启用mod_rewrite?、Mod_ReWrite / ReWriteMap使用数据库查找脚本的URL、mod_rewrite – 排除url、php – Apache不使用mod_rewrite.c的相关知识,请在本站搜索。
本文标签: