Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess Mod重写相同格式,不同来源_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

.htaccess Mod重写相同格式,不同来源

.htaccess Mod重写相同格式,不同来源,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,目前正在为一家公司做一些URL重写,我正在努力让新的URL指向正确的文件 我无法访问CMS-页面以两种格式生成: website.com/pressleases.php?lang=EN website.com/page.php?pagename=About&lang=EN 我对每种格式都进行了重写,使其成为相同的所需格式(website.com/language/pagename): 格式1(website.com/pressleases.php) 格式2(website.com/page.

目前正在为一家公司做一些URL重写,我正在努力让新的URL指向正确的文件

我无法访问CMS-页面以两种格式生成:

  • website.com/pressleases.php?lang=EN
  • website.com/page.php?pagename=About&lang=EN
我对每种格式都进行了重写,使其成为相同的所需格式(website.com/language/pagename):

格式1(website.com/pressleases.php)

格式2(website.com/page.php?pagename=About&lang=EN)

问题是两次格式重写的输出相同,但源文件/路径不同。当我创建另一个重定向以将nice URL转发到实际源时,它同时应用于以下两个方面:

RewriteRule ^([A-Za-z]+)/([0-9]+)/([a-zA-Z0-9_-]+)$ productSelection.php?    groupid=$2&lang=$1 [L]
有没有什么方法可以对这两种URL类型使用相同的nice格式,但转发到它们的原始路径?我的重写结构是否不正确,从而阻止了这一点


非常感谢任何帮助

您可以尝试先对php文件执行
-f
检查,如果失败,请使用第二种格式:

# format 1
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2.php -f
RewriteRule ^/?([^/]+)/(.*)/?$ /$2.php?lang=$1 [L,QSA]

# format 2
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2.php !-f
RewriteRule ^/?([^/]+)/(.*)/?$ /page.php?pagename=$2&lang=$1 [L,QSA]
此外,您需要在第一个format1规则中对照实际请求进行检查:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /([^\ \?\.]+)\.php\?lang=
RewriteCond %{QUERY_STRING} ^lang=(.*)$
RewriteRule ^(.*).php$ /%1/$1? [L]
# format 1
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2.php -f
RewriteRule ^/?([^/]+)/(.*)/?$ /$2.php?lang=$1 [L,QSA]

# format 2
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2.php !-f
RewriteRule ^/?([^/]+)/(.*)/?$ /page.php?pagename=$2&lang=$1 [L,QSA]
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /([^\ \?\.]+)\.php\?lang=
RewriteCond %{QUERY_STRING} ^lang=(.*)$
RewriteRule ^(.*).php$ /%1/$1? [L]