2016-07-20 84 views
0

我已经通过干净的网址上的多个线程,但我仍然对它感到困惑。我想在核心PHP网站中使用干净的URL策略。我改变了我的多个URL的.htaccess文件。但我下面的代码工作只为一个页面(一个网址)干净的网址在核心PHP

# Turn on the Rewrite Engine 
RewriteEngine on 
# Rewrite for buyleads.php 
RewriteRule ^buyleads buyleads.php [NC,L] 
## NC makes the rule non case sensitive 
#L makes the last rule that this specific condition match 

# Rewrite for search.php?u=xxx 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ search.php?cat=$1 [L] 



# Rewrite for search.php?u=xxx&subcat=xxx 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)$ search.php?cat=$1&subcat=$2 [L] 
# Rewrite for detail.php?u=xxx 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^detail/([a-z0-9]+)$ /detail.php?id=$1 [L] 

问题1.上面的代码工作只为search.php中,如果我进入www.sitename.com/detail/29(detail.php代码)它的工作原理就像www.sitename/29(search.php)。我在它做了什么错误

问题2我也想知道是否真的有可能通过只有.htaccess文件来制作所有这样的网址?有没有什么办法可以在核心php中创建?

问题3最后,我想知道如何通过.htaccess自动重定向到清理url,就像在点击用户后点击CLick这个应该去www.sitename.com/34/50。

在此先感谢

+0

原始URL /路径详细了解'.htaccess'和'RewriteCond'。我想你只需要在每个块中添加一个关于何时跳过重写小节的条件。目前所有请求都由第一个块满足,如'search.php'。提示:与URI匹配,显然可以有其他方式,但这就是我现在能想到的。 – Jigar

+0

可以请你解释一下吗? – nehaJ

回答

3

关于你的问题:

  1. 你的第二个重写规则并不排除与detail/所以你的第三个规则永远不会达到的第二个开始将搜索detail类网址和子类别29(在您的具体示例中)。您可以从第二条规则中排除detail/,但您也可以更改第二条和第二条规则的顺序以使其正常工作。
  2. 是的,你可以重写所有的网址,并在PHP中使用你的逻辑。你可以发送原始路径作为参数,并在php中解析/分析。
  3. 你应该正确地产生你的链接开始。这样你就不必重定向,而且当你重定向的时候,你不必告诉搜索引擎一个页面被永久移动。

为2点一个小例子:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?url=$1 [L] 

现在所有的URL将被改写,并在你的脚本,你可以得到$_GET['url']

+0

感谢您的回答,但您可以请解释点1和3多一点点,我也做了什么错误呢? – nehaJ

+0

我试图在第二条规则之前添加这行'code' RewriteRule ^(detail)($ | /) - [L]'code'并且改变顺序,现在它显示objen not found页面, – nehaJ