网站正在我们无法访问.htaccess
文件的网络主机上运行。但是,我想对用户友好的URL进行URL重写。
e.g。原始网址
www.example.com/file?q=name
预期网址
www.example.com/file/name
答案 0 :(得分:16)
正如其他人所说,只需使用/index.php/nice/looking/url
之类的链接
URL中间的“index.php”可能看起来有点奇怪,但我不认为没有.htaccess可以让它看起来更好
否则,您可以要求您的托管服务商将任何网址重定向到/index.php,以便您可以在网址中使用/index.php
来处理网址重写。
然后你可以使用正则表达式匹配来检测要包含的文件
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches)
($ matches将包含数组中url的所有“部分”)
小心包含文件,使用白名单,这样您就可以确定没有人能够加载内部文件。
答案 1 :(得分:5)
正如Alix Axel建议您可以使用
www.example.com/index.php/file/name
然后您将使用$_SERVER['REQUEST_URI']
来处理网址。
答案 2 :(得分:4)
您最好的选择是拥有以下网址:
www.example.com/index.php/file/name
你会改写你的PHP代码。
答案 3 :(得分:3)
如果您有Apache服务器且启用了AcceptPathInfo,那么您可以使用您编写的URL。如果/file/name
是常规文件,则/file
的请求将自动重写为/name
,其中 PATH_INFO 值为/file
。
答案 4 :(得分:1)
这可以单独使用 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 主页.fr.php home.de.php
然后在 apache2.conf 中:
AddLanguage fr .fr
AddLanguage de .de
AddLanguage en .en
LanguagePriority fr de en
ForceLanguagePriority Fallback
仍会协商您的语言,但 php 扩展名不会出现在 URL 中。
答案 5 :(得分:-2)
试试这个
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]
这解决了您的问题。查看帖子如何rewrite URL in .htaccess