Mod rewrite Apache Mod重写帮助
我已经研究了几个小时这个问题的解决方案&我想如果有人不介意帮我,这可能会节省我一些时间。我的问题是关于Apache mod_重写;当然,这里有大量的文档,但是没有任何特定于我的要求,这些要求是: 要获取此格式的URL,请执行以下操作:Mod rewrite Apache Mod重写帮助,mod-rewrite,url-rewriting,Mod Rewrite,Url Rewriting,我已经研究了几个小时这个问题的解决方案&我想如果有人不介意帮我,这可能会节省我一些时间。我的问题是关于Apache mod_重写;当然,这里有大量的文档,但是没有任何特定于我的要求,这些要求是: 要获取此格式的URL,请执行以下操作: language/pagename.php language/page.php?slug=pagename (语言可以是“英语”或“法语”,我将为每种语言编写一个单独的规则。[不过只需要一个示例]。页面名称将是任何单词字符(w+)。所有URL都将具有.php扩
language/pagename.php
language/page.php?slug=pagename
(语言可以是“英语”或“法语”,我将为每种语言编写一个单独的规则。[不过只需要一个示例]。页面名称将是任何单词字符(w+)
。所有URL都将具有.php
扩展名)
然后将其重写,以便URL不会在用户浏览器中更改,但php可以接收以下格式的URL:
language/pagename.php
language/page.php?slug=pagename
e、 g.因此,$\u GET['slug']
将返回值pagename
,然后所有请求都由page.php处理
到目前为止,我最好的猜测是
RewriteEngine On
RewriteBase /
RewriteRule ^english/(\w+).php$ english/page.php?slug=$1
然而,这使得php告诉我这个URL的slug=page
,例如english/financial.php
;而不是财务
我也尝试过一系列其他正则表达式约定,而不是w
等等。使用以下规则:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(english|french)/([^/\.]+)\.php$ /$1/page.php?slug=$2 [NC,QSA,L]
httpd vhost.conf
,在
指令中),则需要稍微修改规则english | french
part)slug=page
中的问题:在你的规则中,你很可能有一个重写循环(重写发生后,它会进入下一个迭代——这就是mod_rewrite的工作方式,你需要有一些逻辑来打破这个循环)。而不是RewriteCond%{REQUEST\u FILENAME}-f
您可以使用RewriteCond%{REQUEST\u URI}^/(英语|法语)/page\.php[NC]
但维护起来有点困难(您需要在这里以及重写规则本身中添加语言)[^/\.]+
(除了/
或
之外的任何字符)。。但您可以将其更改为\w+
或任何您认为更好的选项你这个笨蛋!在一条规则中覆盖两个语言文件夹可获得额外加分。。干杯