繁体   English   中英

在没有 htaccess 的情况下用 PHP 重写 URL

[英]URL rewriting in PHP without htaccess

网站在我们无法访问.htaccess文件的网络主机上运行。 但是,我想为用户友好的 URL 进行 URL 重写。

例如原始网址

www.example.com/file?q=name

预期网址

www.example.com/file/name

正如其他人所说,只需使用/index.php/nice/looking/url类的/index.php/nice/looking/url
URL 中间的“index.php”可能看起来有点奇怪,但我认为没有 .htaccess 就不可能让它看起来更好

否则,您可以要求您的托管商将任何 URL 重定向到 /index.php,以便您可以处理 URL 重写,而无需在 URL 中/index.php

然后您可以使用正则表达式匹配来检测要包含的文件。
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches) ($matches 将包含 url 中的所有“部分”大批)

小心包含文件,使用白名单,这样你就可以确定没有人能够加载内部文件。

正如 Alix Axel 建议您可以使用

www.example.com/index.php/file/name

那么您将使用$_SERVER['REQUEST_URI']来处理 URL。

最好的办法是拥有这样的 URL:

www.example.com/index.php/file/name

不过,您将重写您的 PHP 代码。

如果您有一个 Apache 服务器并且启用了AcceptPathInfo ,那么您可以使用您编写的 URL。 如果/file是常规文件,则/file/name请求将自动重写到/file ,其PATH_INFO值为/name

这可以单独使用 Apache 配置(httpd.conf 或 apache2.conf)中的语言/内容协商以及重写规则。 不需要使用.htaccess文件。

在 apache2.conf 文件(或 httpd.conf)中添加Multiviews指令、 MultiviewsMatch指令和重写规则

<Directory /var/www/html>
    Options Indexes FollowSymLinks Multiviews
    AllowOverride None
    Require all granted

    RewriteEngine On
    RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
    RewriteRule ^ /%1 [NC,L,R]

    <Files "*.php">
        MultiviewsMatch Any
    </Files>
</Directory>

然后保存文件并重启Apache sudo systemctl restart apache2

如果稍后在 httpd.conf 中指定Options指令,则必须为每个站点重复Multiviews指令:

<Directory /var/www/html/chocolate.com/>
  Options FollowSymLinks Multiviews
  AllowOverride All
  Require all granted
</Directory>

<Directory /var/www/html/vanilla.com/>
  Options FollowSymLinks Multiviews
  AllowOverride All
  Require all granted
</Directory>

如果您已经以多种语言提供服务,这不会对内容协商产生不利影响。 例如,将 example.com/home.php 替换为

home.en.php home.fr.php home.de.php

然后在 apache2.conf 中:

AddLanguage fr .fr
AddLanguage de .de
AddLanguage en .en
LanguagePriority fr de en
ForceLanguagePriority Fallback

您的语言仍将进行协商,但 php 扩展名不会出现在 URL 中。

尝试这个

www.example.com/file?q=name

www.example.com/name (比www.example.com/file/name更好)

从项目根文件夹打开.htaccess并添加此代码

Options +FollowSymLinks

RewriteEngine On
RewriteRule \.(js|css|jpe?g|png|gif)$ - [L]


RewriteRule "^([ \w-]+)/?$" /file?q=$1 [L,QSA]

这可以解决您的问题。 请参阅如何.htaccess重写 URL的帖子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM