使用.htaccess

时间:2016-10-29 23:03:21

标签: apache .htaccess

我在这里找到了我的问题的答案,但总是提供解决方案而没有解释如何做到这一点,这就是我无法正确完成的原因。

我有这段代码:

RewriteRule ^dex/([^_]*)/([^_]*)/([^_]*)/([^_]*)/([^_]*)$ /dex.php?one=$1&two=$2&three=$3&four=$4&five=$5 [L]

这个htaccess使得必须给出所有参数。此网址有效:

http://example.com/dex/one/two/three/four/five

我也想让它像这样工作:

http://example.com/dex/one/two/three/four

使最后(或某些)参数可选。我在这里读了一些关于QSA | qsappend的内容:http://httpd.apache.org/docs/current/en/rewrite/flags.html#flag_qsa但我无法完全理解它。

有任何帮助吗?谢谢

2 个答案:

答案 0 :(得分:1)

对于有相同问题的人,这是用于修复它的代码:

RewriteRule ^dex/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?([^/]*)?$ /dex.php?one=$1&two=$2&three=$3&four=$4&five=$5 [L]

([^_]*)更改为([^/]*)并在我想要选择之后添加?

在这种情况下:/?使结束斜杠可选,([^/]*)?使最后一个参数可选。因此,当URL如下所示时,它可以工作:

http://example.com/dex/one/two/three/four/

http://example.com/dex/one/two/three/four

http://example.com/dex/one/two/three/four/five

http://example.com/dex/one/two/three/four/five/

希望这有助于某人。

答案 1 :(得分:0)

重写规则使用正则表达式。这些正则表达式总是令人厌烦且难以维护。例如,以下是关于HTML上的正则表达式解析器的问题的答案,以及您可能遇到的难点:

RegEx match open tags except XHTML self-contained tags

您的htaccess文件是Apache配置文件。它应该用于简单配置,而不是用于编程。让它指向代码,然后让代码完成其余的工作。例如,您的.htaccess文件:

RewriteRule ^(.*)$ index.php [QSA,NC,L]

而且,如果你将PHP与index.php一起使用......

$objects = explode('/', ltrim($_SERVER[REDIRECT_URL], '/'));

print_r($objects);    // list of items from URL

您可能最终想要获取不同的SERVER参数,但是您需要在代码中保留这些复杂的内容,而不是在配置文件中。