如何最小化.htaccess规则?

时间:2016-07-28 09:17:00

标签: php apache .htaccess mod-rewrite url-rewriting

我对seo friendly url有以下.htaccess规则:

.htaccess规则:

Options -MultiViews
ErrorDocument 404 http://localhost/aponit/dev/not-found.php
ErrorDocument 500 http://localhost/aponit/dev/404.php
RewriteEngine on

RewriteRule ^(?:zones/)?update/(\w+)/?$ zones/update.php?z=$1 [L,QSA,NC]
RewriteRule ^(?:cable-types/)?update/(\w+)/?$ cable-types/update.php?cbl=$1 [L,QSA,NC]

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

现在,使用此规则我可以​​访问以下网址:

http://localhost/aponit/dev/zones/update/63
http://localhost/aponit/dev/cable-types/update/3

现在我必须创建更多此类网址!那么在这个.htaccess规则中是否有最小化规则?

我的意思是如果我需要10个不同的网址,我必须在.htaccess文件中添加10条规则。 e.g:

RewriteRule ^(?:another/)?another-f/(\w+)/?$ another/another-f.php?another-id=$1 [L,QSA,NC]

我想在此.htaccess文件中为此类网址添加一条规则。

更新

在zones文件夹下的index.php文件中,我有以下代码来编辑和添加新数据:

<a class="btn btn-success btn-xs" href="<?php echo SITE_URL."zones/update/$zone_id"?>" >Edit</a> 

<h4 class="panel-title pull-right"><a href="<?php echo SITE_URL.'zones/add' ?>" class="btn btn-primary">Add New Zones</a></h4> 

要编辑表单数据,我需要这种类型的网址:

http://localhost/aponit/dev/zones/update/63

添加数据我需要这种类型的网址:

http://localhost/aponit/dev/zones/add

最后在.htaccess规则中我只需要一个规则来遵循这种类型的网址

2 个答案:

答案 0 :(得分:1)

使用这两个通用规则而不是上述规则类型:

RewriteCond %{DOCUMENT_ROOT}/aponit/dev/$1/$2\.php -f
RewriteRule ^([\w-]+)/([\w-]+)/?$ $1/$2.php [L]

RewriteCond %{DOCUMENT_ROOT}/aponit/dev/$1/$2\.php -f
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ $1/$2.php?q=$3 [L,QSA]

请注意,所有此类网址的GET参数名称都相同q。在.php文件中,您可以使用$_GET['q']来阅读它。

答案 1 :(得分:0)

只需使用此规则:

RewriteRule ^(.*)/(.*)/(\w+)$  /$1/$2.php?z=$3  [QSA,L,NC]

它将重写:

zones/update/63      >>  /zones/update.php?z=63
cable-types/update/3 >>  /cable-types/update.php?z=63

注1:这标准化了您的路径。您不再制作第一部分(zones/ vs cable-types/可选)

注意2:您必须标准化第一个查询参数的名称。我使用上面的z。然后,在PHP文件中,根据需要使用它。 cable-types/update.php将使用它,就像您在

之前使用cbl参数一样