Htaccess URL重写2个不同的情况但相同的URL结构

时间:2018-02-07 07:05:17

标签: php regex apache .htaccess

我正在关注我网站的网址结构 ex url结构是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z-\s0-9]+)$ service_detail.php?seo=$1 [L,QSA]
</IfModule>

等 这是案例1 现在检查我的htaccess代码

http://www.example.com/contact-us.php
http://www.example.com/openings.php

我的htaccess完全重写了url并重定向到service_detail.php页面(我没有问题)

现在第二个案例是我有一些其他网址有物理页面示例

http://www.example.com/contact-us
http://www.example.com/openings

如果我从网址中删除.php,那么htaccess认为这是一个重定向网址,并重定向到service_detail.php页面

而不是我需要一个规则,如果我联系我们,如果在网址中存在与我们联系,那么它将重定向到contact-us.php页面或者openss.php页面

但没有.php扩展名 喜欢这个

left: auto

提前致谢

1 个答案:

答案 0 :(得分:0)

这是因为您的模式^([A-Za-z-\s0-9]+)$contact-us以及所有其他类似的请求不匹配,这些请求在您的服务器上不作为文件和directorie存在。要解决这个问题:

在下面的RewriteEngine on

添加以下内容
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)/?$ /$1.php [L]

这会将无扩展名的php请求重写到原始目的地,即:/contact-us/contact-us.php