无法使用相同的参数重写多个URL重写

时间:2017-03-21 08:33:31

标签: apache .htaccess url-rewriting

需要您的专家帮助。我试图在htaccess中重写2个url,其中两个url都有相同的参数。重写url后,只有第一个url重写正常。任何人都可以帮助我如何使两个网址重写工作?

这是我的htaccess代码。

1st URL : http://www.example.com/quotaid.php?id=id/address
which i want to rewrite to
http://www.example.com/id/address
//1st URL rewrite
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9]+|[0-9a-zA-Z]+)/?$
RewriteRule ^([a-zA-Z0-9]+|[0-9a-zA-Z]+)/(.*)$ quotaid.php?id=$1 [NC,L]

2nd URL : http://www.example.com/zipquota.php?zip=zip/address
which i want to rewrite to
http://www.example.com/zip/address
//2nd URL rewite in htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9]+)?$
RewriteRule ^(.*)$ zipquota.php?zip=$1 [NC,L]

只有一个url重写正常工作。如果我将第二个url重写移到顶部,那么第二个url重写正在工作,但第一个url停止工作。有关如何管理url重写工作的帮助。

1 个答案:

答案 0 :(得分:0)

假设这就是你要找的东西:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([0-9]+)/(.+)$ /zipquota.php?zip=$1&address=$2 [NC,END]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([0-9a-z]+)/(.+)$ /quotaid.php?id=$1&address=$2 [NC,END]

这些是由你在问题的评论中指定的内部重写,尽管我敢说address参数没有意义,并且可能在将来被删除......:< / p>

  • https://example.org/91007/HOMES-FOR-Arcadia-CA =&gt; /zipquota.php?zip=91007&address=HOMES-FOR-Arcadia-CA
  • https://example.org/CV17057071/3677-Louise-Street-Lynwood-CA-90262 =&gt; /quotaid.php?id=CV17057071&address=3677-Louise-Street-Lynwood-CA-90262

这些规则应该在http服务器主机配置中工作,同样也适用于动态配置文件(.htaccess)。为了能够在动态配置文件中使用它们,必须匹配一些前提条件:必须在http服务器配置(AllowOverride ...)中启用此类文件的解释,该文件必须由http服务器读取它必须放在为该http主机配置的DOCUMENT_ROOT文件夹中。

首先重写基于zip的URL,因为它们使用更具体的模式,纯粹基于数字。然后是具有字母数字模式的id s的更一般规则。你原来拥有的条件并没有多大意义,我把它删除了。

注意:我还冒昧地使这些目标路径绝对(导致斜线)以使设置更加健壮。这显然要求这些脚本直接位于DOCUMENT_ROOT文件夹中。否则必须调整路径。

警告:如果您获得http状态500(内部服务器错误),则可能是您运行的是非常旧版本的apache http服务器。在这种情况下,您必须将END标志替换为L标志。在这种情况下,您可以在http服务器错误日志文件中看到该提示。 L标志 也应该,除非您有更多可能产生冲突的重写规则。

一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。