我有这条规则:
RewriteCond %{REQUEST_URI} ^/((\w{2})/)?[^/]+/d\-(\d+)/?$
RewriteRule (.*) /www/index.php?action=static&lang=$2&sp=0&detail=$3 [L,QSA]
我输入此网址:https://example.com/barvy-bisley-blf/d-30/,但输出结果为:https://www.example/www/index.php?action=static&lang=&sp=0&detail=
如何编辑此规则,以获得此输出? (将ID 30添加到输出中)。
https://www.example.com/www/index.php?action=static&lang=&sp=0&detail=30
谢谢!
答案 0 :(得分:0)
您当前的规则只有一个捕获组,这就是为什么只填充$1
,而不是进一步捕获变量。试试这个:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/((\w{2})/)?[^/]+/d\-(\d+)/?$
RewriteRule ^/?(:\w{2}/)?[^/]+/(d)\-(\d+)/?$ /www/index.php?action=static&lang=$2&sp=0&detail=$1 [L,QSA]
请注意,我们只能猜测您的要求的一些细节,因为您的信息非常模糊且稀疏......
以上规则将重写传入请求
https://example.com/barvy-bisley-blf/d-30/
到内部网址
https://www.example.com/www/index.php?action=static&lang=d&sp=0&detail=30
如果启用了.htaccess
样式文件的解释,则重写模块将加载到http服务器中,.htaccess
样式文件将存储在正确的位置。
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用.htaccess
样式文件。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。
答案 1 :(得分:0)
不确定为什么要将动作,sp和lang添加到url,因为这些动态不是动态的。 inex.php?detail = 30就够了,但我认为这个重写规则可能会根据你提供的信息为你服务。
捕获(\ d +)到%1
并重写(重定向)为action = static& lang =& sp = 0& detail = detail =%1
RewriteEngine On
RewriteCond %{QUERY_STRING} d\-=(\d+) [NC]
RewriteRule ^index\.php$ /index.php?action=static&lang=&sp=0&detail=%1 [L,R=301]