在 URL 中使用 PHP $_GET 方法的 htaccess 重写规则? (从子文件夹到根目录)

htaccess rewriterule with PHP $_GET methods in URL? (From sub-sub-folder to root dir)

目前我正在编写一个小型 cms,其中 "index.php" 从数据库加载可用模板和附属内容,并使用 str_replace 的内容来操作模板。通常的 URL 看起来像这样:

http://URL/Dir1/template_hp/index.php?nav=content (*1)

如您所见,我通过 $_GET['nav'] 动态获取内容名称。现在,我正在尝试使用放置在根目录 (http://"URL"/".htaccess") 中的 .htaccess 文件来操作 URL 以:

http://URL/cms/content

如果你调用“http://URL/cms”,没有参数的 index.php 将显示为内容(保持干净 URL),如果你调用这个 URL “.../a_content_name”将显示“.../index.php?nav=content”(也保持干净的 URL),但如果调用整个 URL (*1),它将显示为清洗过一次。

到目前为止,我已经查看和尝试了 15 个多小时,几乎完成了任何教程在网络上显示的所有内容,但我得到的要么什么都没发生,要么我得到一个 500 Internal服务器错误 即使使用 Mod_rewrite 生成器内容。

我已经完成的是 AllowOverride Allapache2.conf 我总是转 RewriteEngine ON, php_flag display_errors on, php_value error_reporting E_ALLOptions +FollowSymLinks。我自己写的是:

RewriteRule ^Dir1/template_hp/index.php?*.*(\?(.*)=(.*))$ cms?.*(//) [NC,L]

...大约有 9.000.000 种不同的方式(转义“.”(或转义“?”),将 RewriteBase 设置为“myURL”并删除“^”或尝试从网页 (RewriteRule ^([^/]*)$ /Dir1/template_hp/index.php?nav= [L]) 生成一次。

唯一有效的是 RedirectMatch 301,但这只是我想要的一小部分:-(.

这里没有其他人知道为什么它不起作用!

按如下操作:

RewriteEngine On

RewriteCond %{THE_REQUEST} ^GET\ /Dir1/template_hp/index\.php\?nav=([^\s&]+) [NC]
RewriteRule ^ /cms/%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cms/(.+)/?$ /Dir1/template_hp/index.php?nav= [NC,L]