通过 htaccess RewriteRule 在 url 中添加“?”
add " ? " in url via htaccess RewriteRule
我尝试在 htaccess 中使用 RewriteRule
我想要我的url
site.com/f_search.php?langs=en&langs=en
效果像
site.com/en/new.php?/en/f_search
我在 htaccess 中使用了这段代码
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?/new.php+?+/([^/]*)/?/f_search/?$ f_search.php?langs=&langs=
但它不适用于“?”
如果我将 new.php+?+ 更改为 new.php+@+
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?/new.php+@+/([^/]*)/?/f_search/?$ f_search.php?langs=&langs=
效果不错
site.com/en/new.php@/en/f_search
有什么想法可以将 @ 更改为 ?在我的 url ???
谢谢
问号和后面的内容 不是 主题的一部分,RewriteRule 的模式与之匹配。这是明确记录的。相反,您需要使用 RewriteCond
来访问查询字符串的内容。
我想这大概就是您要查找的内容,但您可能需要对其进行调整以符合您的实际情况:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^/([a-z]+)/f_search$
RewriteRule ^/?(?:([a-z]+)/)?new\.php$ /f_search.php?langs=&langs=%1
从你的问题来看,不清楚重写目标中参数“langs”的两个值应该从哪里获取。因此,您可能需要根据规则中的需要进行调整。
同样令人费解的是,您试图将该参数设置为“langs”两次 ...这毫无意义,第二次尝试只会覆盖第一次的值尝试将这些值移交给基于 php 的逻辑。
apache http服务器重写模块的文档提供了很多准确的帮助和很好的例子:https://httpd.apache.org/docs/current/mod/mod_rewrite.html
最终代码
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-z]+)/new.php$ f_search.php?langs= [L,NC]
我尝试在 htaccess 中使用 RewriteRule
我想要我的url
site.com/f_search.php?langs=en&langs=en
效果像
site.com/en/new.php?/en/f_search
我在 htaccess 中使用了这段代码
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?/new.php+?+/([^/]*)/?/f_search/?$ f_search.php?langs=&langs=
但它不适用于“?”
如果我将 new.php+?+ 更改为 new.php+@+
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?/new.php+@+/([^/]*)/?/f_search/?$ f_search.php?langs=&langs=
效果不错
site.com/en/new.php@/en/f_search
有什么想法可以将 @ 更改为 ?在我的 url ???
谢谢
问号和后面的内容 不是 主题的一部分,RewriteRule 的模式与之匹配。这是明确记录的。相反,您需要使用 RewriteCond
来访问查询字符串的内容。
我想这大概就是您要查找的内容,但您可能需要对其进行调整以符合您的实际情况:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^/([a-z]+)/f_search$
RewriteRule ^/?(?:([a-z]+)/)?new\.php$ /f_search.php?langs=&langs=%1
从你的问题来看,不清楚重写目标中参数“langs”的两个值应该从哪里获取。因此,您可能需要根据规则中的需要进行调整。
同样令人费解的是,您试图将该参数设置为“langs”两次 ...这毫无意义,第二次尝试只会覆盖第一次的值尝试将这些值移交给基于 php 的逻辑。
apache http服务器重写模块的文档提供了很多准确的帮助和很好的例子:https://httpd.apache.org/docs/current/mod/mod_rewrite.html
最终代码
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-z]+)/new.php$ f_search.php?langs= [L,NC]