【问题标题】:Htaccess URL Rewriting 2 Different cases But Same URL StructureHtaccess URL重写2种不同的情况但相同的URL结构
【发布时间】:2018-02-07 07:05:16
【问题描述】:

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

http://www.example.com/service-name-1
http://www.example.com/service-name-2

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

<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>

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

现在第二种情况是我有一些其他 url 有物理页面示例

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

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

我想要一个规则,如果在 url 中存在contact-us OR openings,那么我将重定向到contact-us.php 页面或 openings.php 页面

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

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

提前致谢

【问题讨论】:

  • 也许RewriteRule ^([A-Za-z-\s0-9]+).php$ $1.php [L,QSA],我已经很久没有比.* index.php做得更多了;p
  • 谢谢哥们.. 但它不工作
  • 谢谢哥们 .. 它正在工作
  • 酷,你把它放在另一个上面了吗?
  • @LawrenceCherone 您在上面发布的规则可能会导致无限循环错误,因为它将/file.php 重写为自身/file.php 我确信OP 没有对此进行测试。

标签: php regex apache .htaccess


【解决方案1】:

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

RewriteEngine on右下方添加以下内容

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)/?$ /$1.php [L]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多