在 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 All
在 apache2.conf
我总是转 RewriteEngine ON
, php_flag display_errors on
,
php_value error_reporting E_ALL
和 Options +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]
目前我正在编写一个小型 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 All
在 apache2.conf
我总是转 RewriteEngine ON
, php_flag display_errors on
,
php_value error_reporting E_ALL
和 Options +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]