我在这里找到了我的问题的答案,但总是提供解决方案而没有解释如何做到这一点,这就是我无法正确完成的原因。
我有这段代码:
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但我无法完全理解它。
有任何帮助吗?谢谢
答案 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参数,但是您需要在代码中保留这些复杂的内容,而不是在配置文件中。