GVKun编程网logo

php – 如何使用mod_rewrite显示SEO友好URL?

14

在这里,我们将给大家分享关于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?

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?

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

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_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

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的相关知识,请在本站搜索。

本文标签: